应用模板和上下文项中的doc()

时间:2016-09-14 10:37:10

标签: xslt

我想将模板应用于由doc()加载的文档,该文档可以正常工作:

<xsl:apply-templates select="doc('snippets.xml')//snippet" />

我想通过使用当前上下文项的属性来选择要处理的<snippet>

<xsl:apply-templates select="doc('snippets.xml')//snippet[@id=@snippet]" />

哪个不起作用,因为显然doc()会更改上下文项。 有没有办法从周围的模板访问上下文,而不是像这样设置一个变量:

<xsl:variable name="snippet_id" select="@snippet" />
<xsl:apply-templates select="doc('snippets.xml')//snippet[@id=$snippet_id]" />

在哪里可以找到规范如何影响doc()的上下文?

1 个答案:

答案 0 :(得分:2)

这与doc()函数无关,而与评估谓词的方式有关: https://www.w3.org/TR/xpath20/#id-predicates

XSLT有一个特殊的功能来处理这个问题:
https://www.w3.org/TR/xslt20/#current-function

在这里,您将使用:

<xsl:apply-templates select="doc('snippets.xml')//snippet[@id=current()/@snippet]" />