XPath 2.0 前导"/"无法选择包含上下文项的树的根节点:上下文项不是节点



尝试检查一个值(一旦标记化(与我的文档中的另一个值不匹配:

/foo/bar/baz/tokenize(value,',')[not(. =(/foo/biz/value/string(),'bing'))]

特别是在这里,检查/foo/bar/baz/value(即 'ding,dong,bing'(是否与/foo/biz/value/string(( 或值 'bong' 不匹配。

但是我得到"前导'/'无法选择包含上下文项的树的根节点:上下文项不是节点">

有什么方法可以在 XPath 中做到这一点,还是我需要进入 XQuery 并开始担心变量?

鉴于您使用的是 Saxon,您可以利用 XPath 3.0 允许您绑定变量的事实:

let $foo := /foo return $foo/bar/baz/tokenize(value,',')
[not(. =($foo/biz/value/string(),'bing'))]

或者你可以从谓词中提取表达式:

let $exceptions := (/foo/biz/value/string(),'bing') 
return /foo/bar/baz/tokenize(value,',')[not(. = $exceptions)]

如果你想要纯 XPath 2.0,你可以用一个丑陋的"for"绑定来实现同样的目标:

for $foo in /foo return $foo/bar/baz/tokenize(value,',')
[not(. =($foo/biz/value/string(),'bing'))]

当然,如果您使用的是 XSLT,则可以使用current()

最新更新