XSL - 用值重命名元素

XSL - Rename element with value

只是想学习 XSLT。请参考输入和输出文件 输入 xml 只是文档的一部分。本文档还有更多的记录级别

<?xml version="1.0" encoding="UTF-8"?>
<record level="1">
   <GROUP>ABC</GROUP>
   <NAME>1100000000111</NAME>
</record>

期望的输出 我想将 <record level="1"> 重命名为 <record_level1>

<?xml version="1.0" encoding="UTF-8"?>
<record_level1>
   <GROUP>ABC</GROUP>
   <NAME>1100000000111</NAME>
</record_level1>

如果您以 identity transform 开始复制所有内容作为默认行为,那么您可以添加专门的模板来匹配具有 @level 属性的 record 元素。在该模板内,创建一个元素,其名称将元素名称与属性名称和值连接起来:

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

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="record[@level]">
        <xsl:element name="{concat(name(), '_level', @level)}">
            <xsl:apply-templates select="node()"/>
        </xsl:element>
    </xsl:template>
    
</xsl:stylesheet>

请注意元素名称属性内使用的 {} 大括号。否则它会期望一个字符串文字。 attribute value template allows you to execute code to construct that name value, using the concat() 函数。