我有一个使用导入的简单XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns="http://ex1">
<xsl:import href="import.xsl" />
<xsl:template match="/">
<ROOT>
<FIRST />
<xsl:apply-templates />
</ROOT>
</xsl:template>
</xsl:stylesheet>
导入的样式表是:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="elm">
<ELM/>
</xsl:template>
</xsl:stylesheet>
现在我希望导入的模板也使用主样式表中定义的默认命名空间http://ex1
。我期待:
<ROOT xmlns="http://ex1">
<FIRST/>
<ELM/>
</ROOT>
但我得到了:
<ROOT xmlns="http://ex1">
<FIRST/>
<ELM xmlns=""/>
</ROOT>
导入的样式表必须输出到主模板定义的名称空间。
我尝试了什么
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns="http://ex1">
<xsl:import href="import_nsparam.xsl" />
<xsl:template match="/">
<ROOT>
<FIRST />
<xsl:apply-templates>
<xsl:with-param name="ns">http://ex1</xsl:with-param>
</xsl:apply-templates>
</ROOT>
</xsl:template>
</xsl:stylesheet>
使用此导入:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:template match="elm">
<xsl:param name="ns"/>
<xsl:element name="ELM" namespace="{$ns}"/>
</xsl:template>
</xsl:stylesheet>
它可以工作,但需要大量的生物传感器代码。
有更好的方法吗?
答案 0 :(得分:1)
您可以尝试<xsl:with-param name="ns" select="namespace-uri-for-prefix('', document('')/*)"/>
而不是<xsl:with-param name="ns">http://ex1</xsl:with-param>
,而不必在样式表中对命名空间进行两次硬编码。