我正在使用 XSLT (2.0) 作为 Java 代码生成器。目前我有一个描述数据库表的 XML,我想为其生成实体类。
表的列名总是小写,单词之间带有_。
示例:bat_valid_from
我想在 Java 类中将其重命名为首字母小写的驼峰式
示例:batValidFrom
因为我在我的 codeGen 中经常需要这种安静,所以我喜欢为它提供一个函数。 但我只能通过两个子函数来实现。
<xsl:function name="local:VarName">
<xsl:param name="columnName"/>
<xsl:value-of select="lower-case(substring($columnName,1,1))"/>
<xsl:value-of select="substring(local:VarName_sub($columnName),2)"/>
</xsl:function>
<xsl:function name="local:VarName_sub">
<xsl:param name="columnName"/>
<xsl:value-of select="local:VarName_sub_sub($columnName)"/>
</xsl:function>
<xsl:function name="local:VarName_sub_sub">
<xsl:param name="columnName"/>
<xsl:for-each select="tokenize($columnName, '_')">
<xsl:value-of select="upper-case(substring(.,1,1))"/>
<xsl:value-of select="substring(.,2)"/>
</xsl:for-each>
</xsl:function>
也许有人有办法简化这个?
如果没有子函数,我会得到以下错误:
不允许将多个项目的序列作为 fn:substring() 的第一个参数
PS:我没有贴出完整的代码来缩短问题
最佳答案
XSLT/XPath 2.0 支持 for
expressions .你可以这样做:
string-join(
for $part in tokenize($input, '_')
return concat(
upper-case(substring($part, 1, 1)),
substring($part, 2)
)
, '')
将 $input
设置为 'bat_valid_from'
,此表达式将生成 'BatValidFrom'
。
我将小写(或不大写)首字母作为练习。
关于xslt - XSL 2.0 : Format String with _ to CamelCase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52792096/