2011-02-15 44 views
1

我正在开发一个接受用户定义的XPath表达式的应用程序,并将它们用作其运行时操作的一部分。这种XPath技术在所有情况下都可靠吗?

不过,我想能够通过编程方式操纵表情来推断其他一些数据,我很好奇,想知道是否有此方法可能会失败的任何情况。

给出的任何用户定义的XPath表达式,它返回一个节点集,是安全的包装它在XPath count()函数来确定节点的该组中的号:

count(user_defined_expression) 

类似地,是它的安全到数组索引附加到表达式提取该集合中的节点之一:

user_defined_expression[1] 

回答

3

嗯XPath表达式(XPath 1.0中)可产生一个节点集合或一个字符串或数字或布尔值和做计数(表达)仅使上的任何表达式,产生一个节点集感。

与添加位置谓词,我想你可能要使用括号表达即改变/root/foo/bar(/root/foo/bar)[1]如您选择通过/root/foo/bar选择的节点集的第一个bar元素的方式,而没有他们,你会获得/root/foo/bar[1],其将选择root元素的任何foo子元素的第一个bar子元素。

+0

很高兴看到我提出了相同的可能问题:) – Flack 2011-02-15 12:12:04

+0

谢谢,这正是我想避免的那种意想不到的复杂情况。 – 2011-02-15 17:13:00

2

你检查这样的用户定义的表达式始终评估为节点集合?

如果是,则第一个Expr可以。数据类型将是正确的fn:count

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

+0

也谢谢。你的回答非常接近我接受的答案(可惜我不能接受这两个答案),但Martin的方法很可能会涵盖我的应用将面临的情况。 – 2011-02-15 17:17:12

1

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

但是,这仍然只会给你表达式的语法结构;如果您需要语义信息(例如结果的推断静态类型),则可能需要在公开此信息的XPath进程内戳。

相关问题