我有以下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”的列表......?
感谢。
答案 0 :(得分:3)
您可以简单地使用/root/table/concat(a, b)
,它会为您提供一系列字符串。但是您需要使用可以处理该返回类型的API,我认为JAXP API仅限于XPath 1.0类型,因此如果您想充分利用XPath 2.0,请确保使用Saxon的http://www.saxonica.com/documentation/index.html#!xpath-api/s9api-xpath。 p>
答案 1 :(得分:1)
请尝试以下代码:
for $item in /root/table return concat($item/a, $item/b)
如果简单的concat在你的情况下是不够的,你可以尝试字符串连接:
for $item in /root/table return string-join(concat($item/a, $item/b),"")
请注意,Unicode规范化不会自动应用于fn:concat的结果。有关详细信息,请查看this link。