所以要扩大......
我有一些XML
我有一个XPath"/ root/list/item [4]"我相信它将检索第5个'item'元素(其value属性为4)
这表明XPath"/ root/list/item [5]"将引用(当前不存在的)第6项.
我想要的是一个XPath表达式,它将引用'Next'(尚未存在)'item'元素,无论当前有多少项...
我假设这将传递一个表达式(它将计算当前元素的数量)而不是硬编码数字.
我知道我会怎么做,但根本找不到我应该怎么做......令人沮丧.
更新:澄清......我想返回"最后一个项目节点之后的项目节点".这些属性只是为了区分现有节点).我很欣赏这将返回一个空节点集.
更新:嗯,我有我的答案所以我想这是公平的我解释为什么我想要这个:)
基本上,某些.Net代码使用xPath作为写地址而不是读地址.
我将一个不存在的位置的xPath传递给EnsureNodeExists例程.(注意:我无法改变此EnsureNodeExists例程)代码将迭代xPath的每个元素,如果它不存在则创建它,然后将其设置为下一次迭代的父元素.
因此,我可以使用"/ root/list/item [position()= last()]/following-sibling :: item [1]"3次调用此代码,这将导致创建3个项目节点.
首先,你的XPath:
/root/list/item[4]
获取第四个项目(因为[4]
谓词是简写[position() = 4]
).
要使用@value
4 获取项目,请使用:
/root/list/item[@value = '4']
如果要在项目后面用@value
4 获取项目,请使用:
/root/list/item[@value = '4']/following-sibling::item[1]
这意味着,以英文为"从去/root/list/item
用@value = '4'
,看看命名为'项’下面的兄弟姐妹和占据第一位".
即使没有以下项目,这也有效.在这种情况下,所选节点集将为空.
编辑:请注意,如果有多个值为4的项目,上面的表达式产生的结果可能会出乎意料.您将获得值为4的项目后面的所有项目.这将最多返回一个项目:
/root/list/item[@value = '4'][1]/following-sibling::item[1]
要引用列表中的最后一个节点,请使用:
/root/list/item[position() = last()]
可以在此处找到解释XPath轴的良好视觉效果:http://nwalsh.com/docs/tutorials/xsl/xsl/graphics/axes.gif(较大教程的一部分).