将XML元素名称转换为camel-case

时间:2013-11-07 20:55:08

标签: xml xslt xslt-1.0

以下是我的xml

<tag>
    <subTag1>
        <tagGroup11>
            <data111>
...

我需要选择所有相同的xml元素,但需要使用驼峰大小写。因此,例如,我在XSLT转换后的新xml需要看起来像

<Tag>
    <SubTag1>
        <TagGroup11>
            <Data111>A</Data111>
            <Data112>B</Data112>
            <Data113>C</Data113>
        </TagGroup11>
        <TagGroup12>
            <Data121>D</Data121>
            <Data122>E</Data122>
            <Data123>F</Data123>
        </TagGroup12>
    </SubTag1>
    <SubTag2>
        <TagGroup22>
            <Data221>twotwoone</Data221>
            <Data222>twotwotwo</Data222>
            <Data223>two two three</Data223>
        </TagGroup22>
        <TagGroup23>
            <Data231>twotwoone</Data231>
            <Data232>twotwotwo</Data232>
            <Data233>two two three</Data233>
        </TagGroup23>
    </SubTag2>
</Tag>

有人可以帮助我使用xslt吗?

1 个答案:

答案 0 :(得分:2)

@arkonautom提出了一个有效的观点:你还没有完全明确你对这种转变的期望。也就是说,以下内容将按您的要求进行。

当这个XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="no" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:variable name="vLowercase" select="'abcdefghijklmnopqrstuvwxyz'"/>
  <xsl:variable name="vUppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>

  <xsl:template match="*">
    <xsl:element
      name="{concat(translate(substring(local-name(), 1, 1),
                              $vLowercase,
                              $vUppercase),
                    substring(local-name(), 2))}"
    >
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

...针对您提供的XML运行(我假设,充实了结构的其余部分):

<tag>
  <subTag1>
    <tagGroup11>
      <data111>A</data111>
      <data112>B</data112>
      <data113>C</data113>
    </tagGroup11>
    <tagGroup12>
      <data121>D</data121>
      <data122>E</data122>
      <data123>F</data123>
    </tagGroup12>
  </subTag1>
  <subTag2>
    <tagGroup22>
      <data221>twotwoone</data221>
      <data222>twotwotwo</data222>
      <data223>two two three</data223>
    </tagGroup22>
    <tagGroup23>
      <data231>twotwoone</data231>
      <data232>twotwotwo</data232>
      <data233>two two three</data233>
    </tagGroup23>
  </subTag2>
</tag>

...生成了想要的结果:

<?xml version="1.0" encoding="UTF-8"?>
<Tag>
  <SubTag1>
    <TagGroup11>
      <Data111>A</Data111>
      <Data112>B</Data112>
      <Data113>C</Data113>
    </TagGroup11>
    <TagGroup12>
      <Data121>D</Data121>
      <Data122>E</Data122>
      <Data123>F</Data123>
    </TagGroup12>
  </SubTag1>
  <SubTag2>
    <TagGroup22>
      <Data221>twotwoone</Data221>
      <Data222>twotwotwo</Data222>
      <Data223>two two three</Data223>
    </TagGroup22>
    <TagGroup23>
      <Data231>twotwoone</Data231>
      <Data232>twotwotwo</Data232>
      <Data233>two two three</Data233>
    </TagGroup23>
  </SubTag2>
</Tag>