小编Luc*_*uca的帖子

使用xslt更改元素的命名空间

我想做到这一点

<hello>
  <one>
    <paragraph>p1</paragraph>
  </one>
</hello> 
Run Code Online (Sandbox Code Playgroud)

进入这个

<x:hello y:an_attribute="a value for an_attribute" xmlns:x="some_new_namespace" xmlns:y="other_ns">
  <one>
    <paragraph>p1</paragraph>
  </one>
</x:hello> 
Run Code Online (Sandbox Code Playgroud)

这是我提出的样式表:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:param name="element_localname" select="'hello'"/>


    <xsl:template match="node()">
        <xsl:choose>
            <xsl:when test="local-name() = $element_localname">
                <xsl:element name="{$element_localname}" namespace="some_new_namespace">
                    <xsl:attribute name="an_attribute" namespace="other_ns">a value for an_attribute</xsl:attribute>
                    <xsl:apply-templates select="node()"/>
                </xsl:element>
            </xsl:when>

            <!-- copy the rest as is -->
            <xsl:otherwise> 
                <xsl:copy>
                    <xsl:apply-templates select="node()" />
                </xsl:copy>
            </xsl:otherwise>

        </xsl:choose>
    </xsl:template>

</xsl:stylesheet> 
Run Code Online (Sandbox Code Playgroud)

但由于一些奇怪的原因,我添加到元素的属性与根元素本身具有相同的命名空间?为什么?

<ns0:hello xmlns:ns0="other_ns" ns0:an_attribute="a value for an_attribute">
  <one>
    <paragraph>p1</paragraph>
  </one>
</ns0:hello>
Run Code Online (Sandbox Code Playgroud)

谢谢你的阅读.

xml xslt

5
推荐指数
1
解决办法
6218
查看次数

标签 统计

xml ×1

xslt ×1