GetFirstChild () and getChildNodes () give not only children, but also text nodes. The first node you get will be the text node (just whitespace and line break).
Example:
String expression = "/students/student[marks/first > 50]";
NodeList nodes = (NodeList)
xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); ++i) {
Node n = nodes.item(i);
for (int j = 0; j < n.getChildNodes().getLength(); ++j) {
Node n1 = n.getChildNodes().item(j);
System.out.println("Level 1 node type: " + n1.getNodeType());
System.out.println("Level 1 node value: " + n1.getNodeValue());
for (int k = 0; k < n1.getChildNodes().getLength(); ++k) {
Node n2 = n1.getChildNodes().item(k);
System.out.println(" Level 2 node type: " + n2.getNodeType());
System.out.println(" Level 2 Node value: " + n2.getNodeValue());
}
}
}
Conclusion:
1
Level 1 node type: 3
Level 1 node value: '
'
Level 1 node type: 1
Level 1 node value: 'null'
Level 2 node type: 3
Level 2 Node value: 'Emily'
Level 1 node type: 3
Level 1 node value: '
'
Level 1 node type: 1
Level 1 node value: 'null'
Level 2 node type: 3
Level 2 Node value: 'Roberts'
Level 1 node type: 3
Level 1 node value: '
'
Level 1 node type: 1
Level 1 node value: 'null'
Level 2 node type: 3
Level 2 Node value: '
'
Level 2 node type: 1
Level 2 Node value: 'null'
Level 2 node type: 3
Level 2 Node value: '
'
Level 2 node type: 1
Level 2 Node value: 'null'
Level 2 node type: 3
Level 2 Node value: '
'
Level 2 node type: 1
Level 2 Node value: 'null'
Level 2 node type: 3
Level 2 Node value: '
'
Level 2 node type: 1
Level 2 Node value: 'null'
Level 2 node type: 3
Level 2 Node value: '
'
Level 1 node type: 3
Level 1 node value: '
'
EDIT: Changed example of displaying student names, not student grades
source
share