xpath只返回一个结果

时间:2014-12-14 13:10:12

标签: java xml xpath

我有一个xml文档,如下所示:

<xmlList>  

  <Phone> 
     <Prefix>04</Prefix>
  </Phone>  

  <Phone> 
     <Prefix>04</Prefix>
  </Phone> 

  <Phone> 
     <Prefix>03</Prefix>
  </Phone>   

</xmlList> 

如果是Prefix,我想检索04节点内容。

String xml = "<xmlList><Phone><Prefix>04</Prefix></Phone><Phone><Prefix>04</Prefix></Phone><Phone><Prefix>03</Prefix></Phone></xmlList>";

XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
InputSource source = new InputSource(new StringReader(xml));  

 // only one string is returned
String prefix = xpath.evaluate("/xmlList/Phone/Prefix", source);

只从xpath.evaluate检索到一个字符串 我想得到一个包含给定XML中所有04次出现的列表。

可能的?

1 个答案:

答案 0 :(得分:2)

正如您在文档https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/XPath.html#evaluate%28java.lang.String,%20org.xml.sax.InputSource%29中看到的那样,evaluate方法的重载会评估XPath并将结果作为字符串返回。与XPath 1.0一样,一组节点的字符串值是节点集中第一个节点的字符串值,您将获得一个包含第一个选定节点内容的字符串。

因此,您需要使用不同的重载,您可以将结果类型指定为NODESET,然后您可以迭代返回的NodeList以收集值。

或考虑切换到XPath 2.0或3.0或XQuery 1.0或3.0实现,如Saxon 9,然后有API返回一系列字符串,例如: /xmlList/Phone/Prefix/string()。您需要使用不同的API,而不是以XPath 1.0为中心的JAXP XPath API。