查找与仅具有XPath的后续节点对应的前一节点

时间:2013-06-18 09:22:18

标签: xml xpath overlap milestone

我有一个“里程碑”-markup与普通的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>

并希望使用XPath来解决“父” - 里程碑结构(即milestone@xml:id='m1')到<node>

每个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来做到这一点。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

将变量$me替换为current()