Java XML Attribute from Node getNodesByAttributeValue(Node node, String attrName, String attrValue)

Here you can find the source of getNodesByAttributeValue(Node node, String attrName, String attrValue)

Description

Gets a list of nodes that matches the given attribute name and attribute value

License

Apache License

Parameter

Parameter Description
attrName the given attribute name
attrValue the given attribute value
node the node under which search must be performed

Return

List of nodes that matches the given attribute properties

Declaration

public static List<Node> getNodesByAttributeValue(Node node,
        String attrName, String attrValue) 

Method Source Code

//package com.java2s;
//License from project: Apache License 

import java.util.ArrayList;
import java.util.List;

import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Main {
    /**/* w w w.java 2s.  co m*/
     * Gets a list of nodes that matches the given attribute name and attribute value
     * @param attrName the given attribute name
     * @param attrValue the given attribute value
     * @param node the node under which search must be performed
     * @return List of nodes that matches the given attribute properties
     */
    public static List<Node> getNodesByAttributeValue(Node node,
            String attrName, String attrValue) {
        List<Node> list = new ArrayList<Node>();

        NodeList nodeList = node.getChildNodes();
        if (nodeList != null) {
            Node child;
            for (int i = 0; i < nodeList.getLength(); i++) {
                child = nodeList.item(i);
                if (nodeAttributeMatches(child, attrName, attrValue)) {
                    list.add(child);
                }
            }
        }

        return list;
    }

    /**
     * Check whether the given nodes containes an attribute with the given name and value.<br>
     * The "matching" is assumed to be true even if the attribute just starts or ends with the given
     * attribute value.<br>
     * This has been allowed to match multiple keyword attributes such as in 
     * <code>class="hfeed hentry"</code> cases.<br>
     * 
     * @param node node to be analyzed
     * @param attrName the attribute name to be matched
     * @param attrValue the attribute value to be matched
     * @return <code>true</code> if node containes the given attributes, <code>false</code> otherwise (even if node is null)
     */
    public static boolean nodeAttributeMatches(Node node, String attrName,
            String attrValue) {

        if (node != null && node.getNodeType() == Node.ELEMENT_NODE) {

            String value = ((Element) node).getAttribute(attrName);
            return (value != null && value.length() > 0 && attributeValueMatches(
                    value, attrValue));

        } else {

            return false;

        }
    }

    public static boolean attributeValueMatches(String value,
            String expectedValue) {

        try { // attribute value is longer than the expected one, it may be a composite one (ie: hfeed hentry)
            if (value.length() > expectedValue.length()) {
                return ((value.startsWith(expectedValue) && value
                        .charAt(expectedValue.length()) == ' ') || (value
                        .endsWith(expectedValue) && value.charAt(value
                        .length() - expectedValue.length() - 1) == ' '));
            } else {
                return (value.equalsIgnoreCase(expectedValue));
            }
        } catch (NullPointerException npe) {
            return false;
        }

    }
}

Related

  1. getNodeAttributeValue(Node node, String attributeName)
  2. getNodeAttributeValue(Node node, String attributeName)
  3. getNodeAttributeValue(Node node, String attrName)
  4. getNodeAttributeValueNS(Node node, String namespaceURI, String attrName)
  5. getNodeMap(NamedNodeMap artifactAttributes)
  6. getNonEmptyAttribute(Element element, String namespace, String localName)
  7. getStringAttributeOptional(Node node, String attributeName, String valueIfEmpty)
  8. getStringAttributeRequired(Node node, String attributeName)
  9. getValueForAttribute(Node currentNode, String attributeName)