【发布时间】:2010-10-20 21:36:12
【问题描述】:
我有两个 XSLT 文件 A.xslt 和 B.xslt,其中 A.xslt 包括 B.xslt.
A.xslt
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my_namespace">
<my:data>This is A.xslt</my:data>
<xsl:include href="B.xslt"/>
<xsl:template name="my_template">
<xsl:value-of select="$remote-data"/>
</xsl:template>
</xsl:stylesheet>
B.xslt
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my_namespace">
<xsl:variable name="remote-data"
select="document('')/*/my:data" />
</xsl:stylesheet>
当然,当评估my_template时,会输出空行。发生这种情况是因为 B.xslt 不包含 my:data 容器并且document('') 调用在包含之前被处理。
我的问题是:我如何从 B.xslt 访问 my:data(使 document('') 在包含后进行处理) ?
感谢任何想法!
更新:在现实生活中,我有多个文件,例如 A.xslt:A1.xslt、A2 .xslt,... 并且需要使用 nodeset 作为结果进行完全相同的计算(如在$remote-data 定义中),但使用不同的参数(存储在 my:data 中)。 p>
可以说我可以为此使用命名模板。但据我所知,这是不可能的,因为模板会返回 RTF,我必须将其返回到 node-set(),这在 XSLT 1.0 解析器中通常不可用。
希望这能澄清我的问题。
【问题讨论】:
-
好问题,+1。请参阅我的答案以了解两种可能的解决方案。