为什么在转换后会出现其他属性

时间:2015-10-13 06:56:58

标签: xml xslt

我想将模板原样复制到输出文档中,但模板标签上会显示其他属性。我正在使用相同的文件进行转换输入。

这是:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="../Product/templates.xsl"/> <!--in fb changees-->
<xsl:output method="xml"/>  
    <xsl:template name="root" match="/">
        <xsl:copy-of select="/xsl:stylesheet/xsl:template[@name='test-case-1']"/>
    </xsl:template>

    <xsl:template name="test-case-1" >
            <test-case-1 name="koza">
                <xsl:value-of select="100"/>
            </test-case-1>
    </xsl:template>
</xsl:stylesheet>

这是输出:

   
<xsl:template xmlns:xsl="http://www.w3.org/1999/XSL/Transform" name="test-case-1">
<test-case-1 name="koza">
    <xsl:value-of select="100"/>
</test-case-1>

令我困扰的是xmlns:xsl作为<xsl:template>标记的属性的外观。为什么此命名空间属性出现在 xsl:template 中?

谢谢。

我期望的输出是这样的:        

    <xsl:template name="test-case-1">
       <test-case-1 name="koza">
          <xsl:value-of select="100"/>
       </test-case-1>
    </xsl:template>

1 个答案:

答案 0 :(得分:1)

XSLT输出始终是命名空间良好的形式。如果输出包含带有名称空间前缀的名称,则它将始终包含该前缀的声明。

为什么要产生错误的输出?

如果要将此输出复制/粘贴到更大的XML文档中,额外的命名空间声明不会造成任何损害。如果使用XSLT转换将其复制到更大的XML文档中,则额外的命名空间声明将消失。