获取叶节点 - 使用Java进行XML解析

use*_*869 3 java xml

是否可以解析XML并获取所有叶节点?

<root>
<emp>
<name>abc<name>
<age>12</age>
</emp>
<dept>
<branch>cse</branch>
</dept>
</root>
Run Code Online (Sandbox Code Playgroud)

我的输出应该是名称年龄分支

van*_*nje 7

使用此XPath表达式查找没有其他元素作为子元素的alle元素://*[count(./*) = 0].

try {
  final Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("input.xml");
  final XPathExpression xpath = XPathFactory.newInstance().newXPath().compile("//*[count(./*) = 0]");
  final NodeList nodeList = (NodeList) xpath.evaluate(doc, XPathConstants.NODESET);
  for(int i = 0; i < nodeList.getLength(); i++) {
    final Element el = (Element) nodeList.item(i);
    System.out.println(el.getNodeName());
  }
} catch (Exception e) {
  e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

结果是

name
age
branch
Run Code Online (Sandbox Code Playgroud)