string - 如何在XSLT中将字符串格式化为Pascal大小写?

标签 string xslt string-formatting pascalcasing

我正在尝试在XSLT中格式化字符串,该字符串需要以pascal大小写,以适合与我一起使用的应用程序使用。

例如:

this_text 将变为 ThisText
this_long_text 将变为 ThisLongText

是否可以在将输入发送给格式的地方进行设置,而不必多次重新创建格式?

最佳答案

此转换:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="vLower" select=
  "'abcdefghijklmnopqrstuvwxyz'"/>

 <xsl:variable name="vUpper" select=
  "'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="text()">
  <xsl:call-template name="Pascalize">
   <xsl:with-param name="pText" select="concat(., '_')"/>
  </xsl:call-template>
 </xsl:template>

 <xsl:template name="Pascalize">
  <xsl:param name="pText"/>

  <xsl:if test="$pText">
   <xsl:value-of select=
    "translate(substring($pText,1,1), $vLower, $vUpper)"/>

   <xsl:value-of select="substring-before(substring($pText,2), '_')"/>

   <xsl:call-template name="Pascalize">
     <xsl:with-param name="pText"
       select="substring-after(substring($pText,2), '_')"/>
   </xsl:call-template>
  </xsl:if>
 </xsl:template>
</xsl:stylesheet>

应用于此XML文档时的:
<t>
  <a>this_text</a>
  <b>this_long_text</b>
</t>

产生所需的结果:
<t>
    <a>ThisText</a>
    <b>ThisLongText</b>
</t>

顺便说一句,这是camelCase,这是PascalCase

关于string - 如何在XSLT中将字符串格式化为Pascal大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2647327/

相关文章:

Python打印出 float 或整数

c++ - 将字符串拆分为标记 - 没有操作系统特定的功能

c++ - 制作 C++ 控制台应用测验。控制台不会接受包含引号的输入

XSLT 排序与先行兄弟相结合::

python - % python 中的字符串运算符

r - 将包含双引号的文本字符串发送到函数

c - 逐行读取文件,包括多个换行符

javascript - 如何在 Cypress 中使用 RegExp 验证电话号码?

xml - 使用 XPath 选择特定表

xslt - 无法获得正确的 XSLT 输出