这种XPath技术在所有情况下都是可靠的吗?

时间:2011-02-15 11:50:33

标签: xpath nodesets

我正在开发一个接受用户定义的XPath表达式的应用程序,并将它们用作运行时操作的一部分。

但是,我希望能够通过编程方式操作表达式来推断一些额外的数据,我很想知道这种方法是否有任何失败的情况。

给定任何返回节点集的用户定义的XPath表达式,将其包装在XPath count()函数中以确定集合中的节点数是安全的:

count(user_defined_expression)

同样,将数组索引附加到表达式以提取集合中的一个节点是否安全:

user_defined_expression[1]

3 个答案:

答案 0 :(得分:3)

XPath表达式(在XPath 1.0中)可以产生节点集或字符串或数字或布尔值,而count(表达式)只对产生节点集的任何表达式有意义。

至于添加位置谓词,我想您可能希望在表达式周围使用括号,即将/root/foo/bar更改为(/root/foo/bar)[1],因为您选择了第一个bar元素由/root/foo/bar选择的节点集,如果没有它们,您将获得/root/foo/bar[1],这将选择bar元素的任何foo子元素的第一个root子元素

答案 1 :(得分:2)

您是否正在检查此类用户定义的表达式是否始终评估为节点集?

如果是,首先是Expr就可以了。数据类型对fn:count

是正确的

第二个是非常棘手的,例如,在很多情况下谓词会超重轴。 Check this answer进行简单分析。很难说,用户的真正含义。

答案 2 :(得分:1)

更强大的方法是将XPath表达式转换为XQueryX,XQueryX是抽象语法树的XML表示形式;然后,您可以对此XML表示执行XQuery或XSLT转换,然后转换回修改后的XPath(或XQuery)进行评估。

然而,这仍然只会给你表达式的句法结构;如果你想要语义信息,比如结果的推断静态类型,你可能不得不在暴露这些信息的XPath进程中戳。