我应该在哪里放置名称空间声明

时间:2016-01-12 11:52:08

标签: xml xslt

我有两个选择。

一个是将名称空间声明为XSL的根标记。 例如:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0">
    <xsl:template name="root" match="/">
        <xsl:element name="fo:content">
            <xsl:value-of select="'alabala'"/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

另一个是将namespace属性用于<xsl:element><xsl:attribute/>。这是第二个例子:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template name="root" match="/">
        <xsl:element name="fo:content" namespace="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0">
            <xsl:value-of select="'alabala'"/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

哪种方法更合适?两者之间有什么区别吗?

1 个答案:

答案 0 :(得分:2)

首先,XSLT允许您编写文字结果元素,因此您根本不需要使用xsl:element,除非您想在运行时计算元素名称和/或命名空间。 / p>

所以使用

<fo:content>...</fo:content>
分别

<fo:content  xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0">...</fo:content>

至于名称空间,如果你只想在样本模板中创建fo:content的子元素和后代元素,那么单个元素上的名称空间声明就足够了。

如果要在其他模板中的该命名空间中创建元素,则需要在这些模板中声明它,或者将其作为方便的单一声明移至xsl:stylesheet