Class DOMElementWriter

java.lang.Object
org.glassfish.pfl.test.DOMElementWriter

public class DOMElementWriter extends Object
Writes a DOM tree to a given Writer. warning: this utility currently does not declare XML Namespaces.

Utility class used by org.apache.tools.ant.XmlLogger XmlLogger and org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter XMLJUnitResultFormatter}.

  • Field Details

    • NS

      private static final String NS
      prefix for genefrated prefixes
      See Also:
    • xmlDeclaration

      private boolean xmlDeclaration
      xml declaration is on by default
    • namespacePolicy

      private DOMElementWriter.XmlNamespacePolicy namespacePolicy
      XML Namespaces are ignored by default.
    • nsPrefixMap

      private HashMap nsPrefixMap
      Map (URI to prefix) of known namespaces.
    • nextPrefix

      private int nextPrefix
      Number of generated prefix to use next.
    • nsURIByElement

      private HashMap nsURIByElement
      Map (Element to URI) of namespaces defined on a given element.
    • lSep

      private static String lSep
    • knownEntities

      protected String[] knownEntities
      Don't try to be too smart but at least recognize the predefined entities.
  • Constructor Details

    • DOMElementWriter

      public DOMElementWriter()
      Create an element writer. The ?xml? declaration will be included, namespaces ignored.
    • DOMElementWriter

      public DOMElementWriter(boolean xmlDeclaration)
      Create an element writer XML namespaces will be ignored.
      Parameters:
      xmlDeclaration - flag to indicate whether the ?xml? declaration should be included.
      Since:
      Ant1.7
    • DOMElementWriter

      public DOMElementWriter(boolean xmlDeclaration, DOMElementWriter.XmlNamespacePolicy namespacePolicy)
      Create an element writer XML namespaces will be ignored.
      Parameters:
      xmlDeclaration - flag to indicate whether the ?xml? declaration should be included.
      namespacePolicy - the policy to use.
      Since:
      Ant1.7
  • Method Details

    • write

      public void write(Element root, OutputStream out) throws IOException
      Writes a DOM tree to a stream in UTF8 encoding. Note that it prepends the <?xml version='1.0' encoding='UTF-8'?> if the xmlDeclaration field is true. The indent number is set to 0 and a 2-space indent.
      Parameters:
      root - the root element of the DOM tree.
      out - the outputstream to write to.
      Throws:
      IOException - if an error happens while writing to the stream.
    • writeXMLDeclaration

      public void writeXMLDeclaration(Writer wri) throws IOException
      Writes the XML declaration if xmlDeclaration is true.
      Parameters:
      wri - the writer to write to.
      Throws:
      IOException - if there is an error.
      Since:
      Ant 1.7.0
    • write

      public void write(Element element, Writer out, int indent, String indentWith) throws IOException
      Writes a DOM tree to a stream.
      Parameters:
      element - the Root DOM element of the tree
      out - where to send the output
      indent - number of
      indentWith - string that should be used to indent the corresponding tag.
      Throws:
      IOException - if an error happens while writing to the stream.
    • openElement

      public void openElement(Element element, Writer out, int indent, String indentWith) throws IOException
      Writes the opening tag - including all attributes - corresponding to a DOM element.
      Parameters:
      element - the DOM element to write
      out - where to send the output
      indent - number of
      indentWith - string that should be used to indent the corresponding tag.
      Throws:
      IOException - if an error happens while writing to the stream.
    • openElement

      public void openElement(Element element, Writer out, int indent, String indentWith, boolean hasChildren) throws IOException
      Writes the opening tag - including all attributes - corresponding to a DOM element.
      Parameters:
      element - the DOM element to write
      out - where to send the output
      indent - number of
      indentWith - string that should be used to indent the corresponding tag.
      hasChildren - whether this element has children.
      Throws:
      IOException - if an error happens while writing to the stream.
      Since:
      Ant 1.7
    • closeElement

      public void closeElement(Element element, Writer out, int indent, String indentWith, boolean hasChildren) throws IOException
      Writes a DOM tree to a stream.
      Parameters:
      element - the Root DOM element of the tree
      out - where to send the output
      indent - number of
      indentWith - string that should be used to indent the corresponding tag.
      hasChildren - if true indent.
      Throws:
      IOException - if an error happens while writing to the stream.
    • encode

      public String encode(String value)
      Escape &lt;, &gt;, &amp;, &apos;, &quot; as their entities and drop characters that are illegal in XML documents.
      Parameters:
      value - the string to encode.
      Returns:
      the encoded string.
    • encodedata

      public String encodedata(String value)
      Drop characters that are illegal in XML documents.

      Also ensure that we are not including an ]]> marker by replacing that sequence with &#x5d;&#x5d;&gt;.

      See XML 1.0 2.2 http://www.w3.org/TR/1998/REC-xml-19980210#charsets and 2.7 http://www.w3.org/TR/1998/REC-xml-19980210#sec-cdata-sect.

      Parameters:
      value - the value to be encoded.
      Returns:
      the encoded value.
    • isReference

      public boolean isReference(String ent)
      Is the given argument a character or entity reference?
      Parameters:
      ent - the value to be checked.
      Returns:
      true if it is an entity.
    • isLegalCharacter

      public boolean isLegalCharacter(char c)
      Is the given character allowed inside an XML document?

      See XML 1.0 2.2 http://www.w3.org/TR/1998/REC-xml-19980210#charsets.

      Parameters:
      c - the character to test.
      Returns:
      true if the character is allowed.
      Since:
      1.10, Ant 1.5
    • removeNSDefinitions

      private void removeNSDefinitions(Element element)
    • addNSDefinition

      private void addNSDefinition(Element element, String uri)
    • getNamespaceURI

      private static String getNamespaceURI(Node n)