Here you can find the source of getNodesByAttributeValue(Node node, String attrName, String attrValue)
Parameter | Description |
---|---|
attrName | the given attribute name |
attrValue | the given attribute value |
node | the node under which search must be performed |
public static List<Node> getNodesByAttributeValue(Node node, String attrName, String attrValue)
//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; } } }