2

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

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

谢谢!

4

2 回答 2

3

这是一种可能的解决方案

第一的:

我想将 XML 树中的连续兄弟节点与某些预定义规则匹配,例如,如果三个兄弟节点一个接一个地出现并且它们具有属性 value="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/ - 此链接有木马 - 只有在您有良好的恶意软件防护时才单击。或者,请联系我获取该应用程序。 ):

替代文字

最后:

我希望 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]
于 2010-04-22T16:37:08.460 回答
1

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

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

这是XpathVisualizer中的样子:

替代文字

“提取它们”不是 xpath 的问题。为此,您可以枚举选定的元素,然后做任何您喜欢的事情,这取决于您。

于 2010-04-22T15:22:00.567 回答