0

只想将 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>

怎么做?谢谢。

4

1 回答 1

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>

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

于 2013-10-28T08:30:22.180 回答