将XML元素名称转换为大小写
以下是我的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
<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,它在问题中不起作用。