2010-04-22 65 views
2

我是XPATH的新手,我想知道是否有一种使用XPATH查询的方法。Xpath查询以匹配序列中的即时兄弟节点

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

谢谢!

+0

一些说明性的示例XML将会有帮助。 – ndim 2010-04-22 15:12:00

回答

1

注意:这并不回答问题。写这个的时候我误解了它。

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

这就是它看起来像在XpathVisualizer

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

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

3

这里是一个可能的解决方案

第一:

我想在一个XML树连续兄弟 节点匹配例如某些 预定义的规则,如果有 三个兄弟节点发生 立即一个接着一个并且 它们具有属性值=“A”, value =“B”和值=“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/) - 这个链接有一个木马 - 只有当你有很好的malwa重新保护。另外,联系我的应用程序):

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] 
相关问题