我有两个XSLT文件 A .xslt和 B .xslt,其中<strong> A .xslt 包含 乙 .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>
乙 .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不包含我的:数据容器,并且在包含之前处理了的document('')
。
我的问题是:我如何从 B .xslt访问我的:数据(包含后让<{}}处理 >)?
感谢任何想法!
更新:在现实生活中我有多个文件,例如 A .xslt: A1 .xslt, A2 .xslt,...并且需要与节点集进行完全相同的计算(如在document('')
定义中)但具有不同的参数(存储在 my:data 中)。
可以说我可以使用命名模板。但据我所知,这是不可能的,因为模板将返回RTF,我必须$remote-data
,这通常在XSLT 1.0解析器中不可用。
希望这能澄清我的问题。
答案 0 :(得分:0)
使用空路径调用的document()
函数将引用代码块“所在”的XSLT的源XML文档。在这种情况下,它是 B.xslt 。
如果您想从 A.xslt 加载/引用XML,请将您的行更改为:
<xsl:variable name="remote-data"
select="document('A.xslt')/*/my:data" />
答案 1 :(得分:0)
有两种可能性:
0.1。正如@ Mads-Hansen已经推荐的那样,使用:
<xsl:variable name="remote-data"
select="document('A.xslt')/*/my:data" />
0.2。在A.xslt中移动$ remote-data
变量的定义:
<xsl:variable name="remote-data"
select="document('')/*/my:data" />
然后可以通过B.xslt的代码访问它,因为全局定义的<xsl:variable>
可以在所有包含或导入的样式表模块中访问。