gpt4 book ai didi

java - xpath 只返回一个结果

转载 作者:行者123 更新时间:2023-11-30 03:37:40 24 4
gpt4 key购买 nike

我有一个 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 的列表。

可能吗?

最佳答案

正如您在文档 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()。但是,您将需要使用与以 XPath 1.0 为中心的 JAXP XPath API 不同的 API。

关于java - xpath 只返回一个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27469626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com