当前位置:  开发笔记 > Android > 正文

如何引用序列中的"下一个"(尚不存在)XML节点?

如何解决《如何引用序列中的"下一个"(尚不存在)XML节点?》经验,为你挑选了1个好方法。

所以要扩大......

我有一些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个项目节点.



1> Tomalak..:

首先,你的XPath:

/root/list/item[4]

获取第四个项目(因为[4]谓词是简写[position() = 4]).

要使用@value4 获取项目,请使用:

/root/list/item[@value = '4']

如果要在项目后面用@value4 获取项目,请使用:

/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(较大教程的一部分).

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有