我是XPATH的新手,我想知道使用XPATH查询是否有一种很好的方法。
我希望将XML树中的连续兄弟节点与某些预定义规则匹配,例如,如果有三个兄弟节点一个接一个地出现,并且它们具有属性值=“A”,值=“B”和值=“C”,我希望XPATH查询匹配这样一个序列中的第一个节点/最后一个节点,我想从XML树中提取所有这些连续的节点序列,以便我以后可以处理它们。
谢谢!
答案 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的问题。为此,您可以枚举所选元素然后执行任何您喜欢的操作,这取决于您。