我有一个与普通 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 来做到这一点。
有什么建议么?