使用(最初に必要な結果):
($first)[1] | ($last)[1]
|
($first)[1]/following::node()
[count(.|($last)[1]/preceding::node()) = count(($last)[1]/preceding::node())]
置換する必要がある場所$first
:
//div[@id="layer22"]/b/span[@style="background-color: #FFFF99"]
と置き換え$last
ます:
//div[@id="layer22"]/a[contains(.,"Join")]
k番目の結果を取得するには、最終的な式($first)[1]
で($first)[{k}]
、($last)[1]
をとに置き換えます。($last)[{k}]
ここで、数値k{k}
に置き換える必要があります。
この手法は、 XPath1.0の集合交差のよく知られたKayessian式から直接得られます。
$ns1[count(.|$ns2) = count($ns2)]
$ns1
これは、2つのノードセットとの交点を選択します$ns2
。
簡単な例を使用したXSLT検証を次に示します。
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>03</num>
<num>07</num>
<num>10</num>
</nums>
この変換:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="v1" select=
"(//num[. = 3])[1]/following-sibling::*"/>
<xsl:variable name="v2" select=
"(//num[. = 7])[1]/preceding-sibling::*"/>
<xsl:template match="/">
<xsl:copy-of select=
"$v1[count(.|$v2) = count($v2)]"/>
</xsl:template>
</xsl:stylesheet>
XPath式を適用し、選択したノードが出力にコピーされます。
<num>04</num>
<num>05</num>
<num>06</num>