gpt4 book ai didi

java - 将多个文本节点转换为单个文本节点的 XPath 函数

转载 作者:行者123 更新时间:2023-11-29 08:07:35 24 4
gpt4 key购买 nike

我正在使用 SAXON Java 计算一个使用 substring-after() 的 XPath 表达式。当针对某些 DOM 执行时,此函数会给我以下错误:

不允许将多个项目的序列作为 substring-after() 的第一个参数。

是否有任何 XPath 函数可以将多个文本节点转换为单个文本节点?以下是我测试的不同 XPath:

1. substring-after(normalize-space(//*[@id='PrintArea']//div/p[1]//span/font), ':')

2. substring-after(normalize-space(//*[@id='PrintArea']//div/p[1]//span/font[1]), ':')

3. substring-after(//*[@id='PrintArea']//div/p[1]//span/font/text(), ':')

4. substring-after(//*[@id='PrintArea']//div/p[1]//span/font[1]/text(), ':')

5. substring-after(//*[@id='PrintArea']//div/p[1]//span/font/text()[position()=1], ':')

5. substring-after(//*[@id='PrintArea']//div/p[1]//span/font[1]/text()[position()=1], ':')

我还应该补充一点,Firebug 的 FirePath 成功评估了上述所有内容。

最佳答案

如果 substring-after 的第一个参数(我称之为 ARG)包含多个节点,XPath 1.0 将忽略除第一个以外的所有节点。如果这是您想要的效果,请将 ARG 更改为 (ARG)[1] 以使其明确。注意括号:/a/b/c/text()[1] 不会有要求的效果,它需要是 (/a/b/c/text() )[1].

还有另外两种可能的解释。您可能想说:对于第一个参数返回的每个文本节点,返回第一个冒号之后的子字符串。那就是

ARG/substring-after(., ':')

或者你可能想说:将第一个参数返回的文本节点连接成一个字符串,并找到这个字符串在第一个冒号之后的部分。那就是

substring-after(string-join(ARG, ''), ':')

因此,根据您想要这三种行为中的哪一种,选择要匹配的语法。 XPath 2.0 使它成为一个错误,因为猜测您的意图是危险的。

关于java - 将多个文本节点转换为单个文本节点的 XPath 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10118914/

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