将名称空间添加到XML节点

时间:2016-10-14 13:39:42

标签: xml xslt

我有一段带有以下节点的XML

<C1478N> xml here </C1478N>

如何添加名称空间前缀和URL以使XML成为

<en:C1478N xmlns:en="http://test.host.com/C1478N"></en:C1478N>

我尝试了以下XSLT,但它无法正常工作

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
                              xmlns:xs="http://www.w3.org/2001/XMLSchema" 
                              xmlns:fn="http://www.w3.org/2005/xpath-functions" 
                              xmlns:ie="http://test.host.com/C1478N" 
                              exclude-result-prefixes="fn xs xsi xsl">

    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>

    <xsl:template match="/">
        <xsl:apply-templates select="/" mode="move-to-namespace">
            <xsl:with-param name="namespace" select="'http://test.host.com/C1478N'"/>
        </xsl:apply-templates>
    </xsl:template>
    <xsl:template match="*" mode="move-to-namespace">
        <xsl:param name="namespace"/>
        <xsl:element name="en:{local-name()}" namespace="{$namespace}">
            <xsl:apply-templates select="@*|node()"/>
        </xsl:element>
    </xsl:template>
    <xsl:template match="@*|node()">
      <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

任何人都知道这是什么问题吗?

由于

1 个答案:

答案 0 :(得分:0)

您的转换不适用于XSLT 1.0处理器。

你为什么不这样做:

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

<xsl:template match="*">
    <xsl:element name="en:{local-name()}" namespace="http://test.host.com/C1478N">
        <xsl:copy-of select="@*" />
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>