ucar.unidata.xml
Class XmlUtil

java.lang.Object
  extended by ucar.unidata.xml.XmlUtil
Direct Known Subclasses:
XmlEncoder

public abstract class XmlUtil
extends Object

A collection of utilities for xml.

Author:
IDV development team

Field Summary
static String NULL_STRING
          Just so we don't have to do (String) null.
static String XML_HEADER
          The header to use when writing out xml
 
Constructor Summary
XmlUtil()
          Dummy ctor for doclint.
 
Method Summary
static void addChildren(Element element, List children)
          Append the given list of children Elements to the given Element.
static void appendCdata(StringBuffer sb, String s)
           
static void appendCdataBytes(StringBuffer sb, byte[] bytes)
           
static void attr(StringBuffer buff, String name, String value, String tab)
          Append onto the given StringBuffer name="value" string encode the value.
static String attr(String name, String value)
          Return a String with name="value".
static String attrs(String name, String value)
           
static String attrs(String n1, String v1, String n2, String v2)
          Return a String with n1="v1" n2="v2".
static String attrs(String n1, String v1, String n2, String v2, String n3, String v3)
          Return a String with n1="v1" n2="v2".
static String attrs(String n1, String v1, String n2, String v2, String n3, String v3, String n4, String v4)
          Return a String with n1="v1" n2="v2".
static String calculateRFC2104HMAC(String data, String key)
          Computes RFC 2104-compliant HMAC signature.
static String closeTag(String name)
          _more_
static String comment(String value)
          Create and return an xml comment.
static Element create(Document doc, String tag, Element parent)
           
static Element create(Document doc, String tag, Element parent, String text)
           
static Element create(Document doc, String tag, Element parent, String[] attrs)
           
static Element create(Document doc, String tag, Element parent, String text, String[] attrs)
           
static byte[] decodeBase64(String s)
          Decode the given base64 String
static String encodeBase64(byte[] b)
          Return the base64 encoded representation of the given byte array
static String encodeString(String v)
          Do a simple conversion of special characters to their encoding.
static void ensureAttributes(Node element, String[] attrs)
          Make sure that the given element contains the given attributes.
static Element findAncestor(Element child, String tagName)
          Find the ancestor of the given node with the given tagname
static Element findChild(Node parent, String tag)
          Find the first child element of the given parent Node whose tag name.equals the given tag.
static Element findChildRecurseUp(Node parent, String tag)
          Find the first child element of the given parent Node whose tag name.equals the given tag.
static List findChildren(Node parent, String tag)
          Find all of the children elements of the given parent Node whose tag name.equals the given tag.
static List findChildrenRecurseUp(Node parent, String tag)
          Find all of the children elements of the given parent Node and all of its ancestors whose tag name.equals the given tag.
static Element findDescendant(Node parent, String tag)
          Find the first descendant element of the given parent Node whose tag name.equals the given tag.
static Element findDescendantFromPath(Element parent, String path)
          This method searches, starting at the given parent, for a descendant path.
static List findDescendants(Node parent, String tag)
          Find all of the descendant elements of the given parent Node whose tag name.equals the given tag.
static List findDescendantsFromPath(Element parent, String path)
          Like findDescendantFromPath, this method finds all descendants.
static Element findElement(Element root, String tag, String attributeName, String attributeValue)
          Find the Element under (recursively) the given root Element with the given tag name (if non-null) that contains an attribute of the given name and value.
static Element findElement(NodeList elements, String attributeName, String attributeValue)
          Find the first Element in the given NodeList of Elements that has the given attribute with value .equals the given attributeValue.
static Element findRoot(Element child)
          Find the root element of the given node.
static Element findUrlRefNode(Element node)
          This method will return either the given node argument if it does not contain an attribute of name "url".
static Element findUrlRefNode(Element node, String urlAttr)
          This method will return either the given node argument if it does not contain an attribute of the given urlAttr.
static String getAttribute(NamedNodeMap attrs, String name)
          Get the given name-d attribute from the given attrs map.
static boolean getAttribute(NamedNodeMap attrs, String name, boolean dflt)
          Get the given name-d attribute from the given attrs map.
static Color getAttribute(NamedNodeMap attrs, String name, Color dflt)
          Get the given name-d attribute from the given attrs map.
static double getAttribute(NamedNodeMap attrs, String name, double dflt)
          Get the given name-d attribute from the given attrs map.
static float getAttribute(NamedNodeMap attrs, String name, float dflt)
          Get the given name-d attribute from the given attrs map.
static int getAttribute(NamedNodeMap attrs, String name, int dflt)
          Get the given name-d attribute from the given attrs map.
static String getAttribute(NamedNodeMap attrs, String name, String dflt)
          Get the given name-d attribute from the given attrs map.
static String getAttribute(Node element, String name)
          Get the given name attribute from the given element.
static boolean getAttribute(Node element, String name, boolean dflt)
          Get the given name-d attribute from the given element.
static Color getAttribute(Node element, String name, Color dflt)
          Get the given name-d attribute from the given element.
static double getAttribute(Node element, String name, double dflt)
          Get the given name-d attribute from the given element.
static float getAttribute(Node element, String name, float dflt)
          Get the given name-d attribute from the given element.
static int getAttribute(Node element, String name, int dflt)
          Get the given name-d attribute from the given element.
static String getAttribute(Node element, String name, String dflt)
          Get the given name-d attribute from the given element.
static String getAttributeFromTree(Node element, String name)
          Get the given named attribute from the given element.
static int getAttributeFromTree(Node element, String name, int dflt)
          Get the given named attribute from the given element.
static String getAttributeFromTree(Node element, String name, String dflt)
          Get the given named attribute from the given element.
static List getAttributesFromTree(Node element, String name, Hashtable tags)
          Get a list of attributes of the given name from the given element and all of its parent elements.
static List getAttributesFromTree(Node element, String name, Hashtable tags, List listOfValues)
          Get a list of attributes of the given name from the given element and all of its parent elements.
static String getChildText(Node parent)
          Concatenates the node values (grom getNodeValue) of the children of the given parent Node.
static Document getDocument(InputStream stream)
          Create a Document object with the given xml.
static Document getDocument(String xml)
          Create a Document object with the given xml.
static Document getDocument(String filename, Class originClass)
          Read in the xml contained in the given filename, parse it and return the root Element.
static Element getElement(Element parent, String tagName)
          Get the first Element children of the given parent Element with the given tagName.
static NodeList getElements(Element parent)
          Get all children of the given parent Element who are instances of the Element class.
static XmlNodeList getElements(Element parent, String tagName)
          Get all Element children of the given parent Element with the given tagName.
static NodeList getElements(Element parent, XmlNodeList nodeList)
          Get all children of the given parent Element who are instances of the Element class.
static Element getFirstChild(Element parent)
          Get the first Element child of the given parent Element.
static NodeList getGrandChildren(Element parent)
          Get all grand children of the given parent Element who are instances of the Element class.
static String getGrandChildText(Node parent, String childTag)
          Finds the child node with the given tag name.
static String getHeader()
          Return the default xml header.
static List getListOfElements(Element parent)
          Create and return a List of the Element children of the given parent node.
static Element getRoot(InputStream stream)
          Read in the xml contained in the given filename, parse it and return the root Element.
static Element getRoot(String xml)
          Parse the given xml and return the root Element.
static Element getRoot(String filename, Class originClass)
          Read in the xml contained in the given filename, parse it and return the root Element.
static boolean hasAttribute(Node element, String attributeName)
          Does the given node have the attribute
static void main(String[] args)
          A main for tests
static CDATASection makeCDataNode(Document doc, String text)
           
static Document makeDocument()
          A utility to make an empty document
static void mergeAttributes(Element n1, Element n2)
          Copy the attributes from n2 to n1.
static String openTag(String name)
           
static String openTag(String name, String attrs)
          Return a String of the form: <name attrs />
static String quote(String value)
          Wrap the given string value in quotes.
static void removeChildren(Element parent)
          Remove all children from the given parent Element.
static void setAttribute(Element node, String name, Color value)
          A utility to set the attribute on the given node as the String representation of the given color
static void setAttributes(Element node, String[] attrs)
          The attrs parameter is an array of [name1, value1, name2, value2, etc].
static String tag(String name, String attrs)
          Return a String of the form: <name attrs />
static String tag(String name, String attrs, String contents)
          Return a String of the form: <name attrs > contents </name>
static String toString(Node node)
          Convert the DOM rooted at the given Node to an xml String representation.
static String toString(Node node, boolean prettyPrint)
          Convert the DOM rooted at the given Node to an xml String representation.
static String toString(Node node, String tabSpacing, String newLine)
          Convert the DOM rooted at the given Node to an xml representation.
static String toString(Node node, String tabSpacing, String newLine, boolean recurse)
          Convert the DOM rooted at the given Node to an xml representation.
static String toStringNoChildren(Node node)
          Convert the DOM rooted at the given Node to an xml String representation.
static String toStringWithHeader(Node node)
          Convert the DOM rooted at the given Node to an xml String representation.
static String toStringWithHeader(Node node, String tabSpacing, String newLine)
          Convert the DOM rooted at the given Node to an xml representation.
static String toStringWithHeader(Node node, String tabSpacing, String newLine, boolean prettifyAttrs)
          Convert the xml to a string.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

XML_HEADER

public static final String XML_HEADER
The header to use when writing out xml

See Also:
Constant Field Values

NULL_STRING

public static final String NULL_STRING
Just so we don't have to do (String) null.

Constructor Detail

XmlUtil

public XmlUtil()
Dummy ctor for doclint.

Method Detail

quote

public static String quote(String value)
Wrap the given string value in quotes.

Parameters:
value - the String to wrap in quotes.
Returns:
The given string argument in quotes.

encodeBase64

public static String encodeBase64(byte[] b)
Return the base64 encoded representation of the given byte array

Parameters:
b - The bytes to encode
Returns:
The encoded string

decodeBase64

public static byte[] decodeBase64(String s)
Decode the given base64 String

Parameters:
s - Holds the base64 encoded bytes
Returns:
The decoded bytes

comment

public static String comment(String value)
Create and return an xml comment.

Parameters:
value - The String to comment.
Returns:
The value argument wrapped in an xml comment.

attr

public static void attr(StringBuffer buff,
                        String name,
                        String value,
                        String tab)
Append onto the given StringBuffer name="value" string encode the value.

Parameters:
buff - The string buffer to append onto.
name - The attribute name.
value - The attribute value.
tab - The tab to prepend onto the result.

attr

public static String attr(String name,
                          String value)
Return a String with name="value". Encode the value.

Parameters:
name - The attribute name.
value - The attribute value.
Returns:
The string "name=value"

attrs

public static String attrs(String name,
                           String value)

attrs

public static String attrs(String n1,
                           String v1,
                           String n2,
                           String v2)
Return a String with n1="v1" n2="v2".

Parameters:
n1 - The first attribute name.
v1 - The first attribute value.
n2 - The second attribute name.
v2 - The second attribute value.
Returns:
The attrbiute string.

attrs

public static String attrs(String n1,
                           String v1,
                           String n2,
                           String v2,
                           String n3,
                           String v3)
Return a String with n1="v1" n2="v2". n3="v3".

Parameters:
n1 - The first attribute name.
v1 - The first attribute value.
n2 - The second attribute name.
v2 - The second attribute value.
n3 - The third attribute name.
v3 - The third attribute value.
Returns:
The attrbiute string.

attrs

public static String attrs(String n1,
                           String v1,
                           String n2,
                           String v2,
                           String n3,
                           String v3,
                           String n4,
                           String v4)
Return a String with n1="v1" n2="v2". n3="v3". n4="v4".

Parameters:
n1 - The first attribute name.
v1 - The first attribute value.
n2 - The second attribute name.
v2 - The second attribute value.
n3 - The third attribute name.
v3 - The third attribute value.
n4 - The fourth attribute name.
v4 - The fourth attribute value.
Returns:
The attrbiute string.

tag

public static String tag(String name,
                         String attrs,
                         String contents)
Return a String of the form: <name attrs > contents </name>

Parameters:
name - The tag name.
attrs - The attribute section of the tag.
contents - The body of the tag
Returns:
The return xml.

tag

public static String tag(String name,
                         String attrs)
Return a String of the form: <name attrs />

Parameters:
name - The tag name.
attrs - The attribute section of the tag.
Returns:
The return xml.

openTag

public static String openTag(String name,
                             String attrs)
Return a String of the form: <name attrs />

Parameters:
name - The tag name.
attrs - The attribute section of the tag.
Returns:
The return xml.

openTag

public static String openTag(String name)

closeTag

public static String closeTag(String name)
_more_

Parameters:
name - _more_
Returns:
_more_

getAttributeFromTree

public static String getAttributeFromTree(Node element,
                                          String name)
Get the given named attribute from the given element. If not found then recursively look in the parent of the given element. If the attribute is finally not found then null is returned.

Parameters:
element - The xml node to look within.
name - The attribute name
Returns:
The value of the given attribute or null if not found.

getAttributeFromTree

public static String getAttributeFromTree(Node element,
                                          String name,
                                          String dflt)
Get the given named attribute from the given element. If not found then recursively look in the parent of the given element. If the attribute is finally not found then the dflt argument is returned.

Parameters:
element - The xml node to look within.
name - The attribute name.
dflt - The default value returned.
Returns:
The value of the given attribute or dflt if not found.

getAttributeFromTree

public static int getAttributeFromTree(Node element,
                                       String name,
                                       int dflt)
Get the given named attribute from the given element. If not found then recursively look in the parent of the given element. If the attribute is finally not found then the dflt argument is returned. If it is found then convert the string value to an integer.

Parameters:
element - The xml node to look within.
name - The attribute name.
dflt - The default value returned.
Returns:
The integer value of the attribute or the dflt if the attribute is not found.

getAttributesFromTree

public static List getAttributesFromTree(Node element,
                                         String name,
                                         Hashtable tags)
Get a list of attributes of the given name from the given element and all of its parent elements.

Parameters:
element - The xml node to look within.
name - The attribute name.
tags - If non-null then only look at elements whose tag name is held by the tags hashtable. If the element we are looking at is not within the table then stop searching upwards.
Returns:
The list of attribute values.

getAttributesFromTree

public static List getAttributesFromTree(Node element,
                                         String name,
                                         Hashtable tags,
                                         List listOfValues)
Get a list of attributes of the given name from the given element and all of its parent elements.

Parameters:
element - The xml node to look within.
name - The attribute name.
tags - If non-null then only look at elements whose tag name is held by the tags hashtable. If the element we are looking at is not within the table then stop searching upwards.
listOfValues - The list ot put the values in.
Returns:
The list of attribute values.

hasAttribute

public static boolean hasAttribute(Node element,
                                   String attributeName)
Does the given node have the attribute

Parameters:
element - node
attributeName - attribute
Returns:
has attribute

getAttribute

public static String getAttribute(Node element,
                                  String name)
Get the given name attribute from the given element. If the attribute is not found this will throw an IllegalArgumentException

Parameters:
element - The xml element to look within.
name - The attribute name.
Returns:
The value of the attribute.

ensureAttributes

public static void ensureAttributes(Node element,
                                    String[] attrs)
Make sure that the given element contains the given attributes. If the element does not contain all of the given attribute names then an IllegalArgumentException is thrown.

Parameters:
element - The xml element to look within.
attrs - Array of attribute names.

getAttribute

public static String getAttribute(Node element,
                                  String name,
                                  String dflt)
Get the given name-d attribute from the given element. If not found return the dflt argument.

Parameters:
element - The xml element to look within.
name - The attribute name.
dflt - The default value.
Returns:
The attribute value or the dflt if not found.

getAttribute

public static boolean getAttribute(Node element,
                                   String name,
                                   boolean dflt)
Get the given name-d attribute from the given element. Convert it into a boolean. If not found return the dflt argument.

Parameters:
element - The xml element to look within.
name - The attribute name.
dflt - The default value.
Returns:
The boolean attribute value or the dflt if not found.

getAttribute

public static int getAttribute(Node element,
                               String name,
                               int dflt)
Get the given name-d attribute from the given element. Convert it into an int. If not found return the dflt argument.

Parameters:
element - The xml element to look within.
name - The attribute name.
dflt - The default value.
Returns:
The int attribute value or the dflt if not found.

getAttribute

public static float getAttribute(Node element,
                                 String name,
                                 float dflt)
Get the given name-d attribute from the given element. Convert it into a float. If not found return the dflt argument.

Parameters:
element - The xml element to look within.
name - The attribute name.
dflt - The default value.
Returns:
The float attribute value or the dflt if not found.

getAttribute

public static double getAttribute(Node element,
                                  String name,
                                  double dflt)
Get the given name-d attribute from the given element. Convert it into a double. If not found return the dflt argument.

Parameters:
element - The xml element to look within.
name - The attribute name.
dflt - The default value.
Returns:
The double attribute value or the dflt if not found.

getAttribute

public static Color getAttribute(Node element,
                                 String name,
                                 Color dflt)
Get the given name-d attribute from the given element. Convert it into a Color. If not found return the dflt argument.

Parameters:
element - The xml element to look within.
name - The attribute name.
dflt - The default value.
Returns:
The Color attribute value or the dflt if not found.

getAttribute

public static String getAttribute(NamedNodeMap attrs,
                                  String name)
Get the given name-d attribute from the given attrs map. If not found then throw an IllegalArgumentException.

Parameters:
attrs - The xml attribute map.
name - The name of the attribute.
Returns:
The attribute value.

getAttribute

public static String getAttribute(NamedNodeMap attrs,
                                  String name,
                                  String dflt)
Get the given name-d attribute from the given attrs map. If not found then return the dflt argument.

Parameters:
attrs - The xml attribute map.
name - The name of the attribute.
dflt - The default value
Returns:
The attribute valueif found, else the dflt argument.

getAttribute

public static int getAttribute(NamedNodeMap attrs,
                               String name,
                               int dflt)
Get the given name-d attribute from the given attrs map. If found convert it to int. If not found then return the dflt argument.

Parameters:
attrs - The xml attribute map.
name - The name of the attribute.
dflt - The default value
Returns:
The attribute valueif found, else the dflt argument.

getAttribute

public static float getAttribute(NamedNodeMap attrs,
                                 String name,
                                 float dflt)
Get the given name-d attribute from the given attrs map. If found convert it to float. If not found then return the dflt argument.

Parameters:
attrs - The xml attribute map.
name - The name of the attribute.
dflt - The default value
Returns:
The attribute valueif found, else the dflt argument.

getAttribute

public static double getAttribute(NamedNodeMap attrs,
                                  String name,
                                  double dflt)
Get the given name-d attribute from the given attrs map. If found convert it to double. If not found then return the dflt argument.

Parameters:
attrs - The xml attribute map.
name - The name of the attribute.
dflt - The default value
Returns:
The attribute valueif found, else the dflt argument.

getAttribute

public static boolean getAttribute(NamedNodeMap attrs,
                                   String name,
                                   boolean dflt)
Get the given name-d attribute from the given attrs map. If found convert it to boolean. If not found then return the dflt argument.

Parameters:
attrs - The xml attribute map.
name - The name of the attribute.
dflt - The default value
Returns:
The attribute valueif found, else the dflt argument.

getAttribute

public static Color getAttribute(NamedNodeMap attrs,
                                 String name,
                                 Color dflt)
Get the given name-d attribute from the given attrs map. If found convert it to Color (GuiUtils.decodeColor(java.lang.String, java.awt.Color)). If not found then return the dflt argument.

Parameters:
attrs - The xml attribute map.
name - The name of the attribute.
dflt - The default value
Returns:
The attribute valueif found, else the dflt argument.

setAttribute

public static void setAttribute(Element node,
                                String name,
                                Color value)
A utility to set the attribute on the given node as the String representation of the given color

Parameters:
node - The node
name - The attr name
value - The color

mergeAttributes

public static void mergeAttributes(Element n1,
                                   Element n2)
Copy the attributes from n2 to n1.

Parameters:
n1 - The source of the attributes.
n2 - What to copy into.

setAttributes

public static void setAttributes(Element node,
                                 String[] attrs)
The attrs parameter is an array of [name1, value1, name2, value2, etc]. Set these attributes on the given node.

Parameters:
node - The xml element to set attributes on.
attrs - The array of attribute name/value pairs.

findChild

public static Element findChild(Node parent,
                                String tag)
Find the first child element of the given parent Node whose tag name.equals the given tag. Return null if not found.

Parameters:
parent - The xml node to search for children.
tag - The tag name of the child xml element.
Returns:
The child found or null if not found.

findChildrenRecurseUp

public static List findChildrenRecurseUp(Node parent,
                                         String tag)
Find all of the children elements of the given parent Node and all of its ancestors whose tag name.equals the given tag.

Parameters:
parent - The xml node to search for children.
tag - The tag name of the child xml element.
Returns:
The List of children

findChildRecurseUp

public static Element findChildRecurseUp(Node parent,
                                         String tag)
Find the first child element of the given parent Node whose tag name.equals the given tag. If not found then recursively search up the ancestors of the parent.

Parameters:
parent - The xml node to search for children.
tag - The tag name of the child xml element.
Returns:
The child found or null if not found.

findChildren

public static List findChildren(Node parent,
                                String tag)
Find all of the children elements of the given parent Node whose tag name.equals the given tag. Return an empty list if none found.

Parameters:
parent - The xml node to search for children.
tag - The tag name of the child xml element.
Returns:
The list of children that match the given tag name.

addChildren

public static void addChildren(Element element,
                               List children)
Append the given list of children Elements to the given Element.

Parameters:
element - The parent element.
children - The list of children.

findDescendant

public static Element findDescendant(Node parent,
                                     String tag)
Find the first descendant element of the given parent Node whose tag name.equals the given tag.

Parameters:
parent - The root of the xml dom tree to search.
tag - The tag name to match.
Returns:
The element foudn or null

findDescendants

public static List findDescendants(Node parent,
                                   String tag)
Find all of the descendant elements of the given parent Node whose tag name.equals the given tag.

Parameters:
parent - The root of the xml dom tree to search.
tag - The tag name to match.
Returns:
The list of descendants that match the given tag.

findDescendantFromPath

public static Element findDescendantFromPath(Element parent,
                                             String path)
This method searches, starting at the given parent, for a descendant path. The path is defined by the "." delimited path string. Each token in the path is a tag name.

So, given:

path=Alabama.Alaska.Arkansas
this method will try to find the Arkansas tag which is a child of Alaska, which is a child of Alabama, which is a child of the given parent parameter.

Parameters:
parent - The root of the xml dom tree to search.
path - The "." delimited string of tag names.
Returns:
The list of descendants that are under the given path.

findDescendantsFromPath

public static List findDescendantsFromPath(Element parent,
                                           String path)
Like findDescendantFromPath, this method finds all descendants.

Parameters:
parent - The root of the xml dom tree to search.
path - The "." delimited string of tag names.
Returns:
The list of descendants that are under the given path.

getRoot

public static Element getRoot(