假设我要查询xhtml文档,并且要查询带有id='target'的表后面的所有同级对象。另外,我既不希望该特定元素的第一个<table> sibling ,也不想要第一个<ol> sibling 。这是我能想到的最好的方法:

//table[@id='target']/following-sibling::*[not(self::table[1]) and not(self::ol[1])]

但是,这不会在应有的情况下返回任何结果。显然,我对某些语法不了解(我找不到很好的信息来源)。如果对XPath语法更有经验的人可以帮助我,我将不胜感激。另外,出于纯粹的学术目的,我很好奇以上内容的实际作用。

更新:
有关为什么我的XPath无法正常工作的解释,请参见LarsH的答案;对于可接受的解决方案,请参见Dimitre的答案。

最佳答案

使用:

 /table[@id='target']/following-sibling::*[not(self::table) and not(self::ol)]
|
 /table[@id='target']/following-sibling::table[position() > 1]
|
 /table[@id='target']/following-sibling::ol[position() > 1]

这将选择表中以下所有不是tableol的 sibling ,以及以下所有位置2或更大的table sibling ,以及以下所有位置2或更大的ol sibling 。

正是您想要的:除了 sibling 之后的第一个table和 sibling 之后的第一个ol之外的所有其他 sibling 。

这是纯XPath 1.0 ,不使用任何XSLT函数。

关于xml - XPath-除第一个特定元素外,所有以下同胞,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4300817/

10-13 09:12