XPath java递归递归

时间:2014-03-22 17:03:25

标签: java xml xpath

我想使用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);
    }

0 个答案:

没有答案