Class ElementSupport


  • public final class ElementSupport
    extends Object
    Set of helper methods for working with DOM Elements.
    • Constructor Detail

      • ElementSupport

        private ElementSupport()
        Constructor.
    • Method Detail

      • adoptElement

        public static void adoptElement​(@Nonnull
                                        Document adopter,
                                        @Nonnull
                                        Element adoptee)
        Adopts an element into a document if the child is not already in the document.
        Parameters:
        adoptee - the element to be adopted
        adopter - the document into which the element is adopted
      • appendChildElement

        public static void appendChildElement​(@Nonnull
                                              Element parentElement,
                                              @Nullable
                                              Element childElement)
        Appends the child Element to the parent Element, adopting the child Element into the parent's Document if needed.
        Parameters:
        parentElement - the parent Element
        childElement - the child Element
      • appendTextContent

        public static void appendTextContent​(@Nonnull
                                             Element element,
                                             @Nullable
                                             String textContent)
        Creates a text node with the given content and appends it as child to the given element.
        Parameters:
        element - the element to receive the text node
        textContent - the content for the text node
      • constructElement

        public static Element constructElement​(@Nonnull
                                               Document document,
                                               @Nonnull
                                               QName elementName)
        Constructs an element, rooted in the given document, with the given name.
        Parameters:
        document - the document containing the element
        elementName - the name of the element, must contain a local name, may contain a namespace URI and prefix
        Returns:
        the element
      • constructElement

        public static Element constructElement​(@Nonnull
                                               Document document,
                                               @Nullable
                                               String namespaceURI,
                                               @Nonnull
                                               String localName,
                                               @Nullable
                                               String prefix)
        Constructs an element, rooted in the given document, with the given information.
        Parameters:
        document - the document containing the element
        namespaceURI - the URI of the namespace the element is in
        localName - the element's local name
        prefix - the prefix of the namespace the element is in
        Returns:
        the element
      • getChildElements

        @Nonnull
        public static List<Element> getChildElements​(@Nullable
                                                     Node root)
        Gets the child elements of the given element.
        Parameters:
        root - element to get the child elements of
        Returns:
        list of child elements or an empty list if the root is null.
      • getChildElements

        @Nonnull
        public static List<Element> getChildElements​(@Nullable
                                                     Node root,
                                                     @Nullable
                                                     QName name)
        Gets the child nodes with the given local tag name. If you need to retrieve multiple, named, children consider using getChildElements(Node).
        Parameters:
        root - element to retrieve the children from
        name - name of the child elements to be retrieved
        Returns:
        list of child elements, never null
      • getFirstChildElement

        @Nullable
        public static Element getFirstChildElement​(@Nullable
                                                   Node root,
                                                   @Nullable
                                                   QName name)
        Returns the first child element of the supplied element with the supplied name if it exists. Otherwise null. See getChildElements(Node, QName).
        Parameters:
        root - element to parse child elements
        name - name of the child elements to parse
        Returns:
        first child element or null
      • getChildElementsByTagName

        @Nonnull
        public static List<Element> getChildElementsByTagName​(@Nullable
                                                              Node root,
                                                              @Nullable
                                                              String localName)
        Gets the child nodes with the given local tag name. If you need to retrieve multiple, named, children consider using getChildElements(Node).
        Parameters:
        root - element to retrieve the children from
        localName - local, tag, name of the child element
        Returns:
        list of child elements, never null
      • getChildElementsByTagNameNS

        @Nonnull
        public static List<Element> getChildElementsByTagNameNS​(@Nullable
                                                                Node root,
                                                                @Nullable
                                                                String namespaceURI,
                                                                @Nullable
                                                                String localName)
        Gets the child nodes with the given namespace qualified tag name. If you need to retrieve multiple, named, children consider using getChildElements(Node).
        Parameters:
        root - element to retrieve the children from
        namespaceURI - namespace URI of the child element
        localName - local, tag, name of the child element
        Returns:
        list of child elements, never null
      • getElementAncestor

        @Nullable
        public static Element getElementAncestor​(@Nullable
                                                 Node currentNode)
        Gets the ancestor element node to the given node.
        Parameters:
        currentNode - the node to retrieve the ancestor for
        Returns:
        the ancestral element node of the current node, or null
      • getElementContentAsString

        @Nonnull
        public static String getElementContentAsString​(@Nullable
                                                       Element element)
        Gets the text content for this Element only. Whereas Node.getTextContent() will return all text for this element and all children, this just grabs the text for this element (which may be spread over multiple lines).
        Parameters:
        element - The element to look at.
        Returns:
        The text content, or "" if there is none, never null.
      • getElementContentAsList

        @Nonnull
        public static List<String> getElementContentAsList​(@Nullable
                                                           Element element)
        Gets the value of a list-type element as a list.
        Parameters:
        element - element whose value will be turned into a list
        Returns:
        list of values, never null
      • getElementContentAsQName

        @Nullable
        public static QName getElementContentAsQName​(@Nullable
                                                     Element element)
        Constructs a QName from an element's adjacent Text child nodes.
        Parameters:
        element - the element with a QName value
        Returns:
        a QName from an element's value, or null if the given element is empty
      • getFirstChildElement

        @Nullable
        public static Element getFirstChildElement​(@Nullable
                                                   Node n)
        Gets the first child Element of the node, skipping any Text nodes such as whitespace.
        Parameters:
        n - The parent in which to search for children
        Returns:
        The first child Element of n, or null if none
      • getIndexedChildElements

        @Nonnull
        public static Map<QName,​List<Element>> getIndexedChildElements​(@Nullable
                                                                             Element root)
        Gets the child elements of the given element in a single iteration.
        Parameters:
        root - element to get the child elements of
        Returns:
        child elements indexed by namespace qualified tag name, never null
      • getNextSiblingElement

        @Nullable
        public static Element getNextSiblingElement​(@Nullable
                                                    Node n)
        Gets the next sibling Element of the node, skipping any Text nodes such as whitespace.
        Parameters:
        n - The sibling to start with
        Returns:
        The next sibling Element of n, or null if none
      • isElementNamed

        public static boolean isElementNamed​(@Nullable
                                             Element e,
                                             @Nullable
                                             QName name)
        Check if the given Element has the given name.
        Parameters:
        e - element to check
        name - name to check for
        Returns:
        true if the element has the given name, false otherwise
      • isElementNamed

        public static boolean isElementNamed​(@Nullable
                                             Element e,
                                             @Nullable
                                             String ns,
                                             @Nullable
                                             String localName)
        Shortcut for checking a DOM element node's namespace and local name.
        Parameters:
        e - An element to compare against
        ns - An XML namespace to compare
        localName - A local name to compare
        Returns:
        true iff the element's local name and namespace match the parameters
      • setDocumentElement

        public static void setDocumentElement​(@Nonnull
                                              Document document,
                                              @Nonnull
                                              Element element)
        Sets a given Element as the root element of a given document. If the given element is not owned by the given document than it is adopted first.
        Parameters:
        document - document whose root element will be set
        element - element that will be the new root element