我有一个用例将xml文档中的camelCase元素转换为NewCase,如下所示:
电流:
<firstName>John</firstName>
<lastName>Smith</lastName>
<userId>5692</userId>
所需:
<FirstName>John</FirstName>
<LastName>Smith</LastName>
<UserId>5692</UserId>
我必须通过XSLT来促进这一点。为了做到这一点,我确定了一个正则表达式,可以捕获camelCase以满足我的要求:
\b([a-z])([a-z]*[A-Z][a-z]*)\b
从那里开始,我一直试图通过使用替换函数来通过XSLT2.0来实现这个目的:
replace($xmlToParse,"\b([a-z])([a-z]*[A-Z][a-z]*)\b","REPLACED")
对于最后一个块,我想取匹配的正则表达式的第一段(在lowerCase中,基于上面的正则表达式,段将是'l'和'owercase'),并使用大写函数来改变它第一段/大写字母(所以lowerCase是LowerCase),并为XML中的每个正则表达式匹配执行此操作。不幸的是到目前为止我一直无法实现它。
是否有人能够提供有关如何将它们全部链接在一起的任何见解?
答案 0 :(得分:1)
此转化:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"*[matches(name(), '[a-z]+[A-Z][a-z]*')]">
<xsl:element name=
"{upper-case(substring(name(),1,1))}{substring(name(),2)}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML片段(包装到单个顶部元素中以成为格式良好的XML文档):
<t>
<firstName>John</firstName>
<lastName>Smith</lastName>
<userId>5692</userId>
</t>
会产生想要的正确结果:
<t>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
<UserId>5692</UserId>
</t>