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

使用Xpath查找公共父级

如何解决《使用Xpath查找公共父级》经验,为你挑选了1个好方法。

我想知道是否有任何方法可以使用Xpath访问公共父节点.


sometext sometext2

我有文本节点sometext和sometext2.有没有办法可以访问这两个节点的主(共同父节点)?我不知道包含这些节点的xml的布局.



1> Dimitre Nova..:

使用以下XPath 1.0表达式:

$v1/ancestor::*
   [count(. | $v2/ancestor::*) 
   = 
    count($v2/ancestor::*)
   ]
    [1]

其中$ v1和$ v2包含两个文本节点(如果你不在XSLT中使用XPath,你将不得不用上面表达式中的$ v1和$ v2替换选择这两个文本节点中的每一个的XPath表达式).

说明:

上面的XPath 1.0表达式找到两个节点集的交集:$ v1的所有元素祖先的节点集和$ v2的所有元素祖先的节点集.这是通过所谓的Kaysian交叉方法完成的(在2000年发现这一点的Michael Kay之后).使用Kaysian方法进行交集,通过以下XPath表达式选择两个节点集$ ns1和$ ns2的交集:

  $ns1[count(. | $ns2) = count($ns2)]

然后,从祖先的交叉点,我们必须选择最后一个元素.但是,因为我们使用反向轴(祖先),所需的节点位置必须表示为1.

通过应用以下转换,可以快速验证上面的XPath表达式是否真正选择了最低的共同祖先:



 

  
  

  

    
      
    

当应用于最初提供的XML文档(更正为格式良好的XML)时:


    
sometext sometext2

想要的结果(即两个文本节点的最低共同祖先元素的名称)产生:

主要

选择两个节点的最低共同祖先的XPath 2.0表达式更简单,因为它使用标准XPath 2.0运算符"intersect":

   ($v1/ancestor::* intersect $v2/ancestor::*) 
                                         [last()]

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