xpath: preceding-sibling-or-self

5
我想在我的xpath中使用“preceding-sibling-or-self”的功能,我正在使用“../(self :: * | preceding-sibling :: *)”,但是出现了“Expression must evaluate to a node-set.”的错误提示,所以我肯定是做错了什么。
无论您在上下文节点上还是xml上看起来如何,这都会失败。我想在“/”之后使用此功能,因此需要正确的语法。
xpath表达式“(self :: * | preceding-sibling :: *)”不会出现错误,所以它与我尝试使用它的位置有关。
编辑:
我的错误实际上更基本。甚至没有办法做到“../(.|.)”而不出现那个错误。一般来说,我想先到一个节点,然后从那里查看一组节点。该错误似乎与在斜杠“/”后尝试使用联合运算符“|”有关。

您尝试使用的语法在XPath 2.0中是有效的,但在1.0中则不是。我认为没有一种好的方法可以在单个路径中完成这个任务。您是在什么上下文中使用这些表达式?是在XmlNode.SelectNodes()中吗?还是在XSLT中? - JLRishe
@JLRishe,XmlNode.SelectNodes。这不太好看;我在下面放了一个答案 :) - toddmo
1个回答

7
在XPath中,如果您想使用联合运算符,必须在路径的开头使用它。 (self::*|preceding-sibling::*)/Child 是可以的。
如果您需要执行 Something/(self::*|preceding-sibling::*)/Child,您必须将左侧部分展开,如下所示: (Something/self::*|Something/preceding-sibling::*)/Child

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接