我有以下 xml:
<root>
<table>
<a>a1</a>
<b>b1</b>
</table>
<table>
<a>a2</a>
<b>b2</b>
</table>
<table>
<a>a3</a>
<b>b3</b>
</table>
<table>
.....
</root>
我需要加入“a”和“b”字段(结果:arr[0]=“a1b1”,arr[1]=“a2b2”,arr[2]=“a3b3”... arr[ N]=“aNbN”
使用 XPath 1.0,我只能在第一项上做这样的事情
"concat(/root/table/a, /root/table/b)"
我总是会得到 STRING 结果:“a1b1”,而不是 NODESET。
我尝试过使用 XPath 2.0(我使用 net.sf.saxon,Saxon-HE:9.5.1-4)和 foreach,但没有成功:
"for $item in /root/table/a return concat($item, 'a')"
结果是第一项的 XPathConstants.STRING:“a1a”
但是当我尝试以下变体时,效果很好
"for $item in /root/table/a return $item"
结果是所有项目的 XPathConstants.NODESET:“a1”,“a2”,“a3”
那么,如何获取“a1b1”、“a2b2”、“a3b3”的列表...?
谢谢。
最佳答案
您可以简单地使用/root/table/concat(a, b)
,这将为您提供一个字符串序列。但是您需要使用可以处理该返回类型的 API,我认为 JAXP API 仅限于 XPath 1.0 类型,因此请确保您使用 Saxon 的 http://www.saxonica.com/documentation/index.html#!xpath-api/s9api-xpath如果您想充分利用 XPath 2.0。
关于java - XPath 2.0 在节点集中的每个节点上使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21672729/