1

通常の 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 でそれを行う方法がわかりません。

助言がありますか?

4

1 に答える 1