我有两个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('')调用。
我的问题是:如何访问 My :data from B.xslt (使document('')在包含后进行处理)?
任何想法都是值得赞赏的!
更新:现实生活中的我有多个文件,比如A.xslt:A1.xslt,A2.xslt,因此,需要对节点集进行完全相同的计算(如$remote-data定义中的计算),但需要使用不同的参数(存储在my:data中)。
可以说,我可以使用命名模板。但据我所见,这是不可能的,因为模板将返回RTF,我必须返回node-set(),这在XSLT1.0解析器中通常是不可用的。
希望这能澄清我的问题。
发布于 2010-10-20 12:23:27
使用空路径调用的document()函数将引用代码块“居住”的XSLT的源XML文档。在这种情况下,它是B.xslt。
如果要从A.xslt加载/引用XML,请将行更改为:
<xsl:variable name="remote-data"
select="document('A.xslt')/*/my:data" />发布于 2010-10-20 13:08:28
有两种可能性
.1。正如@Mads所建议的,请使用:
<xsl:variable name="remote-data"
select="document('A.xslt')/*/my:data" /> .2。在remote-data中移动$A.xslt变量的定义:
<xsl:variable name="remote-data"
select="document('')/*/my:data" />然后可以通过B.xslt的代码访问它,因为全局定义的<xsl:variable>在所有包括的或导入的样式表模块中都是可访问的。
https://stackoverflow.com/questions/3977234
复制相似问题