You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XSLT将XML元素名称转换为camelCase格式?

XSLT实现XML元素名转camelCase规范

没问题,我来帮你搞定XML元素名转camelCase的需求。下面是一份完整的XSLT样式表,能把你提供的XML里的所有元素名(包括嵌套元素)转换成符合要求的camelCase格式,同时保留元素内容不变。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 复制所有文本节点、属性(如果XML包含属性也能保留) -->
    <xsl:template match="text() | @*">
        <xsl:copy/>
    </xsl:template>

    <!-- 处理所有元素,转换名称为camelCase格式 -->
    <xsl:template match="*">
        <xsl:element name="{convert-to-camelcase(local-name())}">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

    <!-- 自定义函数:将下划线分隔的名称转为camelCase -->
    <xsl:function name="convert-to-camelcase">
        <xsl:param name="input"/>
        <!-- 先统一转小写,避免原名称大小写混乱的问题 -->
        <xsl:variable name="lowercase-input" select="translate($input, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"/>
        <!-- 按下划线分割成多个分词 -->
        <xsl:variable name="tokens" select="tokenize($lowercase-input, '_')"/>
        
        <!-- 第一个分词直接保留小写,后续分词首字母大写、其余小写后拼接 -->
        <xsl:value-of select="$tokens[1]"/>
        <xsl:for-each select="$tokens[position() > 1]">
            <xsl:value-of select="concat(upper-case(substring(., 1, 1)), substring(., 2))"/>
        </xsl:for-each>
    </xsl:function>
</xsl:stylesheet>

关键部分说明

  • 模板匹配逻辑:第一个模板负责保留文本内容和属性(如果你的XML有属性也不会丢失);第二个模板匹配所有元素,调用自定义函数转换名称后生成新元素,并递归处理子元素,确保嵌套结构也能被正确转换。
  • 自定义转换函数:
    1. 先把输入的元素名统一转成小写,解决原名称大小写混乱的问题(比如你例子里的eLement_Three)。
    2. 用tokenize函数按下划线分割成多个部分。
    3. 第一个分词直接输出小写,后面的每个分词取首字母转大写,拼接剩余的小写部分,最终组合成标准的camelCase名称。

转换效果验证

把你提供的原始XML:

<ROOT_ELEMENT>
    <ELEMENT_1>2595959584</ELEMENT_1>
    <Element_Two>Lorem</Element_Two>
    <eLement_Three>Ipsum</eLement_Three>
    <BIRTH_date>
        <Day>21</Day>
        <Month>09</Month>
        <Year>1955</Year>
    </BIRTH_date>
</ROOT_ELEMENT>

用上面的XSLT转换后,会得到你期望的结果:

<rootElement>
    <element1>2595959584</element1>
    <elementTwo>Lorem</elementTwo>
    <elementThree>Ipsum</elementThree>
    <birthDate>
        <day>21</day>
        <month>09</month>
        <year>1955</year>
    </birthDate>
</rootElement>

内容的提问来源于stack exchange,提问作者Mevlüt Sungur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:50:13