Я использую XSLT (2.0) в качестве генератора кода Java.На данный момент у меня есть XML, который описывает таблицу базы данных, и я хочу сгенерировать для нее класс полномочий.
Имена столбцов таблицы всегда в нижнем регистре с _ между словами.
Пример: bat_valid_from
Я хочу переименовать его в Java-классе в camelcase с первой буквы в нижнем регистре
Пример: batValidFrom
Поскольку в коде часто требуется эта тишина, мне нравится иметь для нее функцию.Но я мог бы достичь этого только с двумя подфункциями.
<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: я не опубликовал весь код, чтобы сократить вопрос