2

我有一个用例将 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")

对于最后一个块,我想取匹配的正则表达式的第一段(在小写的情况下,段将是基于上述正则表达式的“l”和“大写”),并使用大写函数来更改第一段/大写字母(因此 lowerCase 将是 LowerCase),并对 XML 中的每个正则表达式匹配执行此操作。不幸的是,到目前为止,我一直无法实现它。

任何人都可以就如何将它们联系在一起提供任何见解吗?

4

1 回答 1

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>
于 2013-05-15T04:41:22.023 回答