仅限root用户的XSLT xmlns

时间:2013-10-28 05:43:55

标签: xslt-1.0

想要只向root添加一个xmlns声明,我使用这个xml:

<Message>
</Message>

和xslt:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>
<xsl:template match="/">

<xsl:element name="Element1" namespace="http://www.blablabla.com">
<xsl:element name="Element2">
<xsl:element name="Element3">Hmm</xsl:element>
</xsl:element>
<xsl:element name="Element4">
</xsl:element>
</xsl:element>
 </xsl:template>

</xsl:stylesheet>

结果是:

<Element1 xmlns="http://www.blablabla.com">
<Element2 xmlns="">
<Element3>Hmm</Element3>
</Element2>
<Element4 xmlns=""/>
</Element1>

我只希望Element1让xmlns不是Element2,4或其他。

我可以这样做,但这意味着为每个元素写变量名:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:variable name="vNS"
  select="'http://www.blablabla'"/>


<xsl:template match="/">

<xsl:element name="Element1" namespace="{$vNS}">
<xsl:element name="Element2" namespace="{$vNS}">
<xsl:element name="Element3" namespace="{$vNS}">Hmm</xsl:element>
</xsl:element>
<xsl:element name="Element4" namespace="{$vNS}">
</xsl:element>
</xsl:element>
 </xsl:template>

</xsl:stylesheet>

怎么做? 感谢。

1 个答案:

答案 0 :(得分:0)

对命名空间使用xsl:element要求您指明它们所属的命名空间中的所有元素。在处理命名空间时,更容易避免使用xsl:element

例如:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:bla="http://www.blablabla.com">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/">
        <bla:Element1>
            <Element2>
                <Element3>Hmm</Element3>
            </Element2>
            <Element4 />
        </bla:Element1>
    </xsl:template>
</xsl:stylesheet>

这将仅在第一个元素上创建所需的命名空间。您只需将命名空间声明为样式表声明,然后就可以直接在元素中使用此命名空间。在避免使用xsl:element时,您的XSLT也更具可读性。