如何使用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有属性也不会丢失);第二个模板匹配所有元素,调用自定义函数转换名称后生成新元素,并递归处理子元素,确保嵌套结构也能被正确转换。
- 自定义转换函数:
- 先把输入的元素名统一转成小写,解决原名称大小写混乱的问题(比如你例子里的
eLement_Three)。 - 用
tokenize函数按下划线分割成多个部分。 - 第一个分词直接输出小写,后面的每个分词取首字母转大写,拼接剩余的小写部分,最终组合成标准的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
相关产品推荐
相关产品推荐

