Xpath - 通过搜索以下兄弟节点来选择节点

时间:2015-10-01 08:59:15

标签: xml xpath

我有一个像这样的xml,

<chap>
    <p>aaa</p>
    <h1>bbb</h1>
    <p>ccc</p>
    <p>ddd</p>
    <h1>eee</h1>
    <p>fff</p>  
    <h2>ggg</h2> 
    <p>hhh</p> 
    <h1>iii</h1> 
    <p>jjj</p> 
    <h1>kkk</h1> 
    <p>lll</p> 
    <h1>mmm</h1> 
    <p>nnn</p> 
    <h2>ooo</h2> 
    <h1>ppp</h1>
    <p>qqq</p>
</chap>

我需要选择h1个节点,这些节点首先在xml树下面,然后在sibling h节点中找到h1节点。如果首先发现以下兄弟是h2,则不应选择h1

以上xml

<h1>bbb</h1>
<h1>iii</h1>
<h1>kkk</h1> 
应该选择

节点。

如何编写xpath查询以从xml中选择上述节点?

Xpath version is 2.0

1 个答案:

答案 0 :(得分:3)

这是一个可能的XPath 1.0兼容表达式:

/chap/h1[following-sibling::*[starts-with(name(),'h')][1][self::h1]]

简要说明:

  • /chap/h1:找到所有h1,它是根元素的直接子元素chap
  • following-sibling::*[starts-with(name(),'h')][1]:找到name()h开头的[self::h1]最近的兄弟元素。
  • h1:...找到的元素是<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="/"> <xsl:copy-of select="//note" copy-namespaces="no"/> </xsl:template> </xsl:stylesheet>