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

如何选择唯一的节点

如何解决《如何选择唯一的节点》经验,为你挑选了2个好方法。

我发现这个页面描述了Muenchian方法,但我认为我错误地应用了它.

考虑到这将返回一组年龄:

/doc/class/person/descriptive[(@name='age')]/value

1..2..2..2..3..3..4..7

但我希望每个年龄段的节点集只有一个节点.

1..2..3..4..7

这些中的每一个似乎都返回所有值,而不是唯一值:

/doc/class/person/descriptive[(@name='age')][not(value=preceding-sibling::value)]/value
/doc/class/person/descriptive[(@name='age')]/value[not(value=preceding-sibling::value)]

我错过了什么?



1> BQ...:

这是一个例子:


    A
    B
    C
    A
    A
    B
    D
    A

和XPath:

//preceding::item/preceding::item[not(.=preceding-sibling::item)]/text()

结果:ABCD

编辑:正如mousio评论的那样,如果它出现的唯一时间,则不会捕获列表中的最后一项.考虑到这一点和Fëanor的评论,这是一个更好的解决方案:

/root/item[not(.=preceding-sibling::item)]



2> ChuckB..:

以下是使用他的数据的BQ答案的Muenchian版本:




  
  

  
    
  

  
    
      
      

    
  

  
    
  

这种转变给出了

A
B
C
D

    key()上面的模板中的查找item返回一个节点集,其中包含item与上下文节点具有相同字符串值的所有元素.

    如果将需要单个节点的函数应用于节点集,则它将在该节点集中的第一个节点上运行.

    generate-id()保证所有调用在单次传递文档期间为给定节点生成相同的ID.

    因此,如果上下文节点与key()调用返回的第一个节点相同,则测试将为true .

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