com.android.utils
Class XmlUtils

java.lang.Object
  extended by com.android.utils.XmlUtils

public class XmlUtils
extends java.lang.Object

XML Utilities


Field Summary
static char NS_SEPARATOR
          Separator for xml namespace and localname
static java.lang.String XML_COMMENT_BEGIN
           
static java.lang.String XML_COMMENT_END
           
static java.lang.String XML_PROLOG
           
 
Constructor Summary
XmlUtils()
           
 
Method Summary
static void appendXmlAttributeValue(java.lang.StringBuilder sb, java.lang.String attrValue)
          Appends text to the given StringBuilder and escapes it as required for a DOM attribute node.
static void appendXmlTextValue(java.lang.StringBuilder sb, java.lang.String textValue)
          Appends text to the given StringBuilder and escapes it as required for a DOM text node.
static void attachSourceFile(org.w3c.dom.Node node, SourceFile sourceFile)
           
static java.lang.String formatFloatAttribute(double value)
          Format the given floating value into an XML string, omitting decimals if 0
static java.lang.String fromXmlAttributeValue(java.lang.String escapedAttrValue)
          Converts the given XML-attribute-safe value to a java string
static SourceFilePosition getSourceFilePosition(org.w3c.dom.Node node)
           
static java.io.Reader getUtfReader(java.io.File file)
          Returns a character reader for the given file, which must be a UTF encoded file.
static boolean hasElementChildren(org.w3c.dom.Node node)
          Returns true if the given node has one or more element children
static java.lang.String lookupNamespacePrefix(org.w3c.dom.Node node, java.lang.String nsUri)
          Returns the namespace prefix matching the requested namespace URI.
static java.lang.String lookupNamespacePrefix(org.w3c.dom.Node node, java.lang.String nsUri, boolean create)
          Returns the namespace prefix matching the requested namespace URI.
static java.lang.String lookupNamespacePrefix(org.w3c.dom.Node node, java.lang.String nsUri, java.lang.String defaultPrefix, boolean create)
          Returns the namespace prefix matching the requested namespace URI.
static org.w3c.dom.Document parseDocument(java.lang.String xml, boolean namespaceAware)
          Parses the given XML string as a DOM document, using the JDK parser.
static org.w3c.dom.Document parseDocumentSilently(java.lang.String xml, boolean namespaceAware)
          Parses the given XML string as a DOM document, using the JDK parser.
static org.w3c.dom.Document parseUtfXmlFile(java.io.File file, boolean namespaceAware)
          Parses the given UTF file as a DOM document, using the JDK parser.
static java.lang.String stripBom(java.lang.String xml)
          Strips out a leading UTF byte order mark, if present
static java.lang.String toXml(org.w3c.dom.Node node)
          Dump an XML tree to string.
static java.lang.String toXml(org.w3c.dom.Node node, java.util.Map<SourcePosition,SourceFilePosition> blame)
           
static java.lang.String toXmlAttributeValue(java.lang.String attrValue)
          Converts the given attribute value to an XML-attribute-safe value, meaning that single and double quotes are replaced with their corresponding XML entities.
static java.lang.String toXmlTextValue(java.lang.String textValue)
          Converts the given attribute value to an XML-text-safe value, meaning that less than and ampersand characters are escaped.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

XML_COMMENT_BEGIN

public static final java.lang.String XML_COMMENT_BEGIN
See Also:
Constant Field Values

XML_COMMENT_END

public static final java.lang.String XML_COMMENT_END
See Also:
Constant Field Values

XML_PROLOG

public static final java.lang.String XML_PROLOG
See Also:
Constant Field Values

NS_SEPARATOR

public static final char NS_SEPARATOR
Separator for xml namespace and localname

See Also:
Constant Field Values
Constructor Detail

XmlUtils

public XmlUtils()
Method Detail

lookupNamespacePrefix

@NonNull
public static java.lang.String lookupNamespacePrefix(@NonNull
                                                             org.w3c.dom.Node node,
                                                             @NonNull
                                                             java.lang.String nsUri)
Returns the namespace prefix matching the requested namespace URI. If no such declaration is found, returns the default "android" prefix for the Android URI, and "app" for other URI's. By default the app namespace will be created. If this is not desirable, call lookupNamespacePrefix(Node, String, boolean) instead.

Parameters:
node - The current node. Must not be null.
nsUri - The namespace URI of which the prefix is to be found, e.g. SdkConstants.ANDROID_URI
Returns:
The first prefix declared or the default "android" prefix (or "app" for non-Android URIs)

lookupNamespacePrefix

@NonNull
public static java.lang.String lookupNamespacePrefix(@NonNull
                                                             org.w3c.dom.Node node,
                                                             @NonNull
                                                             java.lang.String nsUri,
                                                             boolean create)
Returns the namespace prefix matching the requested namespace URI. If no such declaration is found, returns the default "android" prefix for the Android URI, and "app" for other URI's.

Parameters:
node - The current node. Must not be null.
nsUri - The namespace URI of which the prefix is to be found, e.g. SdkConstants.ANDROID_URI
create - whether the namespace declaration should be created, if necessary
Returns:
The first prefix declared or the default "android" prefix (or "app" for non-Android URIs)

lookupNamespacePrefix

public static java.lang.String lookupNamespacePrefix(@Nullable
                                                     org.w3c.dom.Node node,
                                                     @Nullable
                                                     java.lang.String nsUri,
                                                     @Nullable
                                                     java.lang.String defaultPrefix,
                                                     boolean create)
Returns the namespace prefix matching the requested namespace URI. If no such declaration is found, returns the default "android" prefix.

Parameters:
node - The current node. Must not be null.
nsUri - The namespace URI of which the prefix is to be found, e.g. SdkConstants.ANDROID_URI
defaultPrefix - The default prefix (root) to use if the namespace is not found. If null, do not create a new namespace if this URI is not defined for the document.
create - whether the namespace declaration should be created, if necessary
Returns:
The first prefix declared or the provided prefix (possibly with a number appended to avoid conflicts with existing prefixes.

toXmlAttributeValue

@NonNull
public static java.lang.String toXmlAttributeValue(@NonNull
                                                           java.lang.String attrValue)
Converts the given attribute value to an XML-attribute-safe value, meaning that single and double quotes are replaced with their corresponding XML entities.

Parameters:
attrValue - the value to be escaped
Returns:
the escaped value

fromXmlAttributeValue

@NonNull
public static java.lang.String fromXmlAttributeValue(@NonNull
                                                             java.lang.String escapedAttrValue)
Converts the given XML-attribute-safe value to a java string

Parameters:
escapedAttrValue - the escaped value
Returns:
the unescaped value

toXmlTextValue

@NonNull
public static java.lang.String toXmlTextValue(@NonNull
                                                      java.lang.String textValue)
Converts the given attribute value to an XML-text-safe value, meaning that less than and ampersand characters are escaped.

Parameters:
textValue - the text value to be escaped
Returns:
the escaped value

appendXmlAttributeValue

public static void appendXmlAttributeValue(@NonNull
                                           java.lang.StringBuilder sb,
                                           @NonNull
                                           java.lang.String attrValue)
Appends text to the given StringBuilder and escapes it as required for a DOM attribute node.

Parameters:
sb - the string builder
attrValue - the attribute value to be appended and escaped

appendXmlTextValue

public static void appendXmlTextValue(@NonNull
                                      java.lang.StringBuilder sb,
                                      @NonNull
                                      java.lang.String textValue)
Appends text to the given StringBuilder and escapes it as required for a DOM text node.

Parameters:
sb - the string builder
textValue - the text value to be appended and escaped

hasElementChildren

public static boolean hasElementChildren(@NonNull
                                         org.w3c.dom.Node node)
Returns true if the given node has one or more element children

Parameters:
node - the node to test for element children
Returns:
true if the node has one or more element children

getUtfReader

public static java.io.Reader getUtfReader(@NonNull
                                          java.io.File file)
                                   throws java.io.IOException
Returns a character reader for the given file, which must be a UTF encoded file.

The reader does not need to be closed by the caller (because the file is read in full in one shot and the resulting array is then wrapped in a byte array input stream, which does not need to be closed.)

Throws:
java.io.IOException

parseDocument

@NonNull
public static org.w3c.dom.Document parseDocument(@NonNull
                                                         java.lang.String xml,
                                                         boolean namespaceAware)
                                          throws javax.xml.parsers.ParserConfigurationException,
                                                 java.io.IOException,
                                                 org.xml.sax.SAXException
Parses the given XML string as a DOM document, using the JDK parser. The parser does not validate, and is optionally namespace aware.

Parameters:
xml - the XML content to be parsed (must be well formed)
namespaceAware - whether the parser is namespace aware
Returns:
the DOM document
Throws:
javax.xml.parsers.ParserConfigurationException
java.io.IOException
org.xml.sax.SAXException

parseUtfXmlFile

@NonNull
public static org.w3c.dom.Document parseUtfXmlFile(@NonNull
                                                           java.io.File file,
                                                           boolean namespaceAware)
                                            throws javax.xml.parsers.ParserConfigurationException,
                                                   java.io.IOException,
                                                   org.xml.sax.SAXException
Parses the given UTF file as a DOM document, using the JDK parser. The parser does not validate, and is optionally namespace aware.

Parameters:
file - the UTF encoded file to parse
namespaceAware - whether the parser is namespace aware
Returns:
the DOM document
Throws:
javax.xml.parsers.ParserConfigurationException
java.io.IOException
org.xml.sax.SAXException

stripBom

@NonNull
public static java.lang.String stripBom(@NonNull
                                                java.lang.String xml)
Strips out a leading UTF byte order mark, if present


parseDocumentSilently

@Nullable
public static org.w3c.dom.Document parseDocumentSilently(@NonNull
                                                                  java.lang.String xml,
                                                                  boolean namespaceAware)
Parses the given XML string as a DOM document, using the JDK parser. The parser does not validate, and is optionally namespace aware. Any parsing errors are silently ignored.

Parameters:
xml - the XML content to be parsed (must be well formed)
namespaceAware - whether the parser is namespace aware
Returns:
the DOM document, or null

toXml

public static java.lang.String toXml(@NonNull
                                     org.w3c.dom.Node node)
Dump an XML tree to string. This does not perform any pretty printing. To perform pretty printing, use XmlPrettyPrinter.prettyPrint(node) in sdk-common.


toXml

public static java.lang.String toXml(@NonNull
                                     org.w3c.dom.Node node,
                                     @Nullable
                                     java.util.Map<SourcePosition,SourceFilePosition> blame)

attachSourceFile

public static void attachSourceFile(org.w3c.dom.Node node,
                                    SourceFile sourceFile)

getSourceFilePosition

public static SourceFilePosition getSourceFilePosition(org.w3c.dom.Node node)

formatFloatAttribute

public static java.lang.String formatFloatAttribute(double value)
Format the given floating value into an XML string, omitting decimals if 0

Parameters:
value - the value to be formatted
Returns:
the corresponding XML string for the value