我有两个选择。
一个是将名称空间声明为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>
哪种方法更合适?两者之间有什么区别吗?
答案 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
。