xslt - XSL 2.0 : Format String with _ to CamelCase

标签 xslt

我正在使用 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/

相关文章:

linux - 如何在 xslt 中增加 int 变量?

xml - XSLT:新增属性的定位

xslt - XSLT 1.0变体,用于不同的值

xslt - 在 XSLT 中转换时间字符串

xml - xsl排序不排序?

html - XSLT:转换成非 XML 内容?

xml - 使用 key 函数将元素添加到 XML 无法使用 xslt

asp.net-mvc - ASP.NET MVC 与 XSL

XML - XSL - TO XML 点领导者多次出现

使用 XSLT、输入和输出字符串而不是文件将 XML 转换为 HTML