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

Xslt 应用模板和上下文项中的doc(),xslt,Xslt,我想将模板应用于由doc()加载的文档,该文档工作正常: <xsl:apply-templates select="doc('snippets.xml')//snippet" /> 我想使用当前上下文项的属性选择要处理的: <xsl:apply-templates select="doc('snippets.xml')//snippet[@id=@snippet]" /> 这不起作用,因为显然doc()会更改上下文项。 除了设置如下变量外,是否有其他方法可以从

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

<xsl:apply-templates select="doc('snippets.xml')//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()如何影响上下文的规范?

这与
doc()
函数无关,与谓词的求值方式有关:

XSLT有一个专门的函数来处理这个问题:

在这里,您可以使用:

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

这与
doc()
函数无关,与谓词的求值方式有关:

XSLT有一个专门的函数来处理这个问题:

在这里,您可以使用:

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


我已将您的问题退回到我回答时的问题。你的补充是一个完全不同的问题,应该单独问。你是对的,我会这样做的。谢谢你的帮助。我已经把你的问题退回到我回答的时候。你的补充是一个完全不同的问题,应该单独问。你是对的,我会这样做的。谢谢你的帮助