我有一个像这样的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
答案 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>