in src/main/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java [165:208]
public static boolean testNode(final Node node, final NodeTest test) {
if (test == null) {
return true;
}
if (test instanceof NodeNameTest) {
if (node.getNodeType() != Node.ELEMENT_NODE) {
return false;
}
final NodeNameTest nodeNameTest = (NodeNameTest) test;
final QName testName = nodeNameTest.getNodeName();
final String namespaceURI = nodeNameTest.getNamespaceURI();
final boolean wildcard = nodeNameTest.isWildcard();
final String testPrefix = testName.getPrefix();
if (wildcard && testPrefix == null) {
return true;
}
if (wildcard || testName.getName().equals(getLocalName(node))) {
final String nodeNS = getNamespaceURI(node);
return equalStrings(namespaceURI, nodeNS) || nodeNS == null && equalStrings(testPrefix, getPrefix(node));
}
return false;
}
if (test instanceof NodeTypeTest) {
final int nodeType = node.getNodeType();
switch (((NodeTypeTest) test).getNodeType()) {
case Compiler.NODE_TYPE_NODE:
return true;
case Compiler.NODE_TYPE_TEXT:
return nodeType == Node.CDATA_SECTION_NODE || nodeType == Node.TEXT_NODE;
case Compiler.NODE_TYPE_COMMENT:
return nodeType == Node.COMMENT_NODE;
case Compiler.NODE_TYPE_PI:
return nodeType == Node.PROCESSING_INSTRUCTION_NODE;
default:
return false;
}
}
if (test instanceof ProcessingInstructionTest && node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE) {
final String testPI = ((ProcessingInstructionTest) test).getTarget();
final String nodePI = ((ProcessingInstruction) node).getTarget();
return testPI.equals(nodePI);
}
return false;
}