通过XSLT替换XML本地名称

时间:2011-08-04 21:18:09

标签: xslt-1.0

我想转换以下代码

=====

<spirit:parameter>
    <spirit:name>P3</spirit:name>
          <spirit:test_value>8</spirit:test_value>
        </spirit:parameter>
</spirit:parameters>

=====

进入

=====

<spirit:parameter>
    <spirit:name>P3</spirit:name>
          <spirit:glue_value>8</spirit:glue_value>
        </spirit:parameter>
</spirit:parameters>

=====

我想通过XSLT来实现。请帮忙

1 个答案:

答案 0 :(得分:0)

您的示例输入不是很有效,因此稍微更改并添加了命名空间:

<?xml version="1.0" encoding="UTF-8"?>
<spirit:parameters xmlns:spirit="http://example.com/namespace/spirit">
    <spirit:parameter>
        <spirit:name>P3</spirit:name>
        <spirit:test_value>8</spirit:test_value>
    </spirit:parameter>
</spirit:parameters>

你基本上想要复制除'spirit:test_value'之外的所有节点,这些节点需要重命名:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:spirit="http://example.com/namespace/spirit">
    <xsl:output omit-xml-declaration='yes'/>

    <xsl:template match="spirit:parameters|spirit:parameter|spirit:name">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="spirit:test_value">
        <spirit:glue_value>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </spirit:glue_value>
    </xsl:template>
</xsl:stylesheet>

<xsl:copy-of select="@*"/>”部分是可选的,如果要复制源XML中的任何属性,则需要这些部分。