Xpath查询以匹配序列中的直接兄弟节点

时间:2010-04-22 15:07:32

标签: xml xpath xpathquery

我是XPATH的新手,我想知道使用XPATH查询是否有一种很好的方法。

我希望将XML树中的连续兄弟节点与某些预定义规则匹配,例如,如果有三个兄弟节点一个接一个地出现,并且它们具有属性值=“A”,值=“B”和值=“C”,我希望XPATH查询匹配这样一个序列中的第一个节点/最后一个节点,我想从XML树中提取所有这些连续的节点序列,以便我以后可以处理它们。

谢谢!

2 个答案:

答案 0 :(得分:3)

以下是一种可能的解决方案

首先:

  

我想匹配连续的兄弟姐妹   XML树中的节点确定   预定义规则,例如,如果有   发生了三个兄弟节点   一个接着一个接一个地   他们有属性值=“A”,   value =“B”和value =“C”,

//*[@value='A' 
  and 
   following-sibling::*[1]/@value='B' 
  and 
   following-sibling::*[2]/@value='C']

然后:

  

我想提取所有这样的连续   XML树中的节点序列   ...

    //*[@value='A' 
      and 
       following-sibling::*[1]/@value='B' 
      and 
       following-sibling::*[2]/@value='C']
   |
    //*[@value='A' 
      and 
       following-sibling::*[1]/@value='B' 
      and 
       following-sibling::*[2]/@value='C']

      /following-sibling::*[position() = 1 or position()=2]

以下是真正的XPathVisualizer中的选择方式(_http://www.topxml.com/xpathvisualizer/-此链接有木马 - 只有在您拥有良好的恶意软件保护时才会点击。或者,请联系我应用程序。):

alt text http://i42.tinypic.com/dxbtso.jpg

最后:

  

我希望XPATH查询匹配   这样的第一个节点/最后一个节点   序列

    //*[@value='A' 
      and 
       following-sibling::*[1]/@value='B' 
      and 
       following-sibling::*[2]/@value='C']
   |
    //*[@value='A' 
      and 
       following-sibling::*[1]/@value='B' 
      and 
       following-sibling::*[2]/@value='C']

      /following-sibling::*[position()=2]

答案 1 :(得分:1)

注意:这不回答问题。我在写这篇文章时误解了它。

要查询它们, 使用position()=1 or position()=last()作为谓词,可能与用于选择节点的其他谓词一起使用。

这就是XpathVisualizer中的样子:

alt text http://i40.tinypic.com/2ir15j4.jpg

“提取它们”不是xpath的问题。为此,您可以枚举所选元素然后执行任何您喜欢的操作,这取决于您。