我想使用xpath查找具有特定元素名称的所有元素。问题是我搜索的xml文件没有一致的结构。但是他们都有特定的元素名称。例如,假设我正在寻找员工的名字,我有一些不同的xml结构。 1。
<Company>
<Employees>
<Programmers>
<Employee id="1">
<age>29</age>
<first-name>John</first-name>
<last-name>Pitt</last-name>
<gender>Male</gender>
<role>Java Developer</role>
</Employee>
</Programmers>
<Managers />
</Employees>
</Company>
2
<Company>
<Employees>
<Employee id="1">
<age>29</age>
<name>
<first-name>John</first-name>
<last-name>Pitt</last-name>
</name>
<gender>Male</gender>
<role>Java Developer</role>
</Employee>
</Employees>
</Company>
在第一个xml中,名字位于路径/company/employees/programmers/employee/first-name
中,与第二个文件中的名字一样,路径为/company/employees/employee/name/first-name
我想要所有名字,例如我知道结构与员工级别一致:/company/employees
。如何递归搜索名称为first-name
的所有节点并获取其值?
到目前为止,我所尝试的是这段代码不起作用,似乎只有一个级别:
expr = xpath.compile("/company/employees/*");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item( i );
String nodeName = node.getNodeName();
String nodeValue="";
node.getChildNodes().item( 0 ).getNodeValue();
if( nodeName.equals( "first-name" ) )
System.out.println(nodeValue);
}