通常の XML と絡み合った「マイルストーン」マークアップがあります。
<root>
<milestone type="opener" xml:id="m1" />
text
<milestone type="opener" xml:id="m2"/>
text
<milestone type="closer" ref="#m2"/>
text
<node>
text
</node>
...
<milestone type="closer" ref="#m1"/>
</root>
そして、「親」マイルストーン構造 (つまりmilestone@xml:id='m1'
) を<node>
XPath 以外の何も使用しないように処理したいと考えています。
すべてがマイルストーン構造のオープナーおよびクローザーとしてmilestone@xml:id
対応します。milestone@ref
ノードの「親」マイルストーン構造は、次のようなもので識別されます。
node/preceding::milestone/concat('#',@xml:id) = node/following:milestone/@ref
このテストは、のコンテキストに依存します<node>
。次のようなものを使用して XSLT で実装できます。
<xsl:template match="node">
<xsl:variable name="me" select="."/>
<xsl:value-of select="./preceding::milestone[
./concat('#',@xml:id) =
$me/following::milestone/@ref
][1]/@xml:id" />
</xsl:template>
しかし、純粋な XPath でそれを行う方法がわかりません。
助言がありますか?