在XSLT中,“当前节点”和“上下文节点”的区别是什么?您可以在此处找到使用这两个术语的内容:http://www.w3.org/TR/xslt。
何时使用其中一个?如何引用每个节点?
何时使用其中一个?如何引用每个节点?
<a>
<b>
<c>foo<footnote fn="1"/></c>
<d>bar</d>
</b>
<b>
<c>baz</c>
<d>aak<footnote fn="2"/></d>
</b>
<b>
<c>eep</c>
<d>blech<footnote fn="2"/></d>
</b>
<footnote-message fn="1">Batteries not included.</footnote>
<footnote-message fn="2">Some assembly required.</footnote>
</a>
假设现在您想将其转换为LaTeX格式,如下所示:
foo\footnote{Batteries not included.}
bar
baz
aak\footnote{Some assembly required.}
eep
blech\footnotemark[2]
关键是要确定脚注是否已经被使用过。如果这是您第一次遇到该脚注,您想要编写一个 \footnote
命令;否则,您想要编写一个 \footnotemark
命令。您可以使用以下 XSL 代码:
<xsl:choose>
<xsl:when test="count(preceding::*[./@fn = current()/@fn]) = 0">\footnote{...}</xsl:when>
<xsl:otherwise>\footnotemark[...]</xsl:otherwise>
</xsl:choose>
在这里,我们正在比较上下文节点的fn
属性(来自preceding::*
节点集的结果)与当前节点的fn
属性。(实际上您不必说./@fn
;您可以只说@fn
。)
简而言之,上下文节点让您留在XPath谓词内部;当前节点到达谓词外部,回到当前模板正在处理的节点。
上下文节点是XPath 位置步骤 的一部分,并且随着每个位置步骤而变化:
step1 / step2 / step3 / ...
其中每个步骤
为
axis::node-test[predicate]
predicate
时,上下文节点是沿着axis
通过node-test
的节点。.
访问上下文节点。当前节点是XSLT 处理模型的一部分:1
current()
访问当前节点。