Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将XML元素名称转换为大小写_Xml_Xslt_Xslt 1.0 - Fatal编程技术网

将XML元素名称转换为大小写

将XML元素名称转换为大小写,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,以下是我的xml <tag> <subTag1> <tagGroup11> <data111> ... ... 我需要选择所有相同的xml元素,但大小写相同。例如,XSLT转换后的新xml需要如下所示 <Tag> <SubTag1> <TagGroup11> <Data111>A</Data11

以下是我的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>

A.
B
C
D
E
F
二一
两个两个
223
二一
两个两个
223

有人能帮我使用xslt吗?

@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>
<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>

…是针对您提供的XML运行的(我想,是通过结构的其余部分充实起来的):

<?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>
<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>

A.
B
C
D
E
F
二一
两个两个
223
二一
两个两个
223
…生成所需结果:

<?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>
<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>

A.
B
C
D
E
F
二一
两个两个
223
二一
两个两个
223

从您的示例来看,似乎只需要将每个元素的第一个字母转换为大写。您是否有/期望将subtag转换为subtag?我已冒昧地将您的帖子标题更改为与问题描述相关的内容。您的标题引用了xsl:for-each,它在问题中不起作用。