java - XPath 2.0 在节点集中的每个节点上使用函数

标签 java xml xpath xpath-2.0

我有以下 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/

相关文章:

xml - ASP.NET Core 的 XML 配置提供程序中的数组

java - 一个模式不能包含两个同名的全局组件

java - org.openqa.selenium.ElementClickInterceptedException : element click intercepted error using Selenium and Java in headless mode

java - 我的 if-else 语句有什么问题?

java - java中的EhCache默认缓存

java - 如何确保用户输入的是特定字符串?

php - 使用 PHP 从 DOM 节点而不是其子节点获取内容

java - 用数组 A 中缺失的数组 B 中的元素填充新数组 - Java

java - Java 中的 Web 服务

c# - Node.SelectNodes(/*) 和 Node.childNodes 有什么区别?