具有名称空间的xslt重命名标签

时间:2018-09-17 09:03:34

标签: xml xslt xslt-1.0

我正在尝试重命名父xml标签。 我在stackoverflow中查了一下,然后看到了以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
  <xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Response_123">
<Response>
  <xsl:apply-templates select="@*|node()"/>
</Response>
</xsl:template>
</xsl:stylesheet>

不幸的是,该代码无法满足我的要求。 在下面的示例中,标记与命名空间相关联。

<ns1:Response_123 xmlns:ns1="AAA">
<System>Alpha</System>
</ns1:Response_123>

当我使用上面的代码时,我仍然收到相同的消息(无论如何都没有区别)。如何将输出更改为:

<ns1:Response xmlns:ns1="AAA">
<System>Alpha</System>
</ns1:Response>

我还尝试在代码中添加名称空间,效果不佳。

<xsl:template match="Response_123" namespace="AAA">
<Response namespace="AAA">
  <xsl:apply-templates select="@*|node()"/>
</Response>
</xsl:template>

谢谢大家!

1 个答案:

答案 0 :(得分:0)

在XSLT中添加名称空间,并使用名称空间调用模板

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns1="AAA"
    version="1.0">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="ns1:Response_123">
        <Response>
            <xsl:apply-templates select="@*|node()"/>
        </Response>
    </xsl:template>
</xsl:stylesheet>