我想将模板应用于由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()的上下文?
答案 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]" />