xPath.evaluate仅返回单个节点

时间:2013-09-26 07:41:30

标签: java

我有以下XML结构:

...
...
  <CON>
    <LANGUAGES>
      <LANGUAGE>Deutsch</LANGUAGE> 
      <LANGUAGE>English</LANGUAGE> 
    </LANGUAGES>
  <CON>
  ...
  ...

使用下面的代码,我正在尝试检索语言,但是当我尝试打印节点列表的长度时,它只返回1.

XPath xPath = XPathFactory.newInstance().newXPath();
NodeList nl = (NodeList)xPath.evaluate("/CU_DATA/CU/CON/LANGUAGES", document, XPathConstants.NODESET);                                  

System.out.println(nl.getLength()); 
// Output: 1

我怎样才能获得这两种语言?

2 个答案:

答案 0 :(得分:3)

  

我怎样才能获得这两种语言?

通过询问LANGUAGE元素而不是LANGUAGES - 毕竟, 只有一个LANGUAGES元素。所以像这样:

NodeList nl = (NodeList)xPath.evaluate("/CU_DATA/CU/CON/LANGUAGES/LANGUAGE",
                                       document, XPathConstants.NODESET);   

或者,找到您当前正在执行的LANGUAGES元素,然后只获取所有子节点。

答案 1 :(得分:0)

尝试:

NodeList nl = (NodeList)xPath.evaluate("/CU_DATA/CU/CON/LANGUAGES//LANGUAGE", document, XPathConstants.NODESET);               

NodeList nl = (NodeList)xPath.evaluate("/CU_DATA/CU/CON/LANGUAGES//*", document, XPathConstants.NODESET);               

/用于分隔节点,其中//递归返回所有节点