2014-10-20 45 views
4

我正在使用wso2esb-4.8.1。如何使用XPath或XSLT将第一个字母更改为小写

我希望将我的请求首字母改为小写。 我收到请求参数如下:

<property name="Methodname" expression="//name/text()" scope="default" type="STRING"/> 

这样我得到的名字,像

GetDetails,CallQuerys,ChangeService ...

而我希望改变所有的名字要这样:

getDetails,callQuerys,changeService ...

如果我想要整个名称的大小写,我可以使用XPath的fn:upper-case()fn:lower-case()函数,但我的要求不同。

如何将所有第一个字母仅更改为小写?

XPath或XSLT有可能吗?

回答

4

的XPath 1.0:

<property name="Methodname" scope="default" type="STRING" 
      expression="concat(translate(substring(//name/text(), 1, 1), 
             'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
             'abcdefghijklmnopqrstuvwxyz'), 
          substring(//name/text(), 2))"/> 

的XPath 2.0:

<property name="Methodname" scope="default" type="STRING" 
      expression="concat(lower-case(substring(//name/text(), 1, 1)), 
          substring(//name/text(), 2))"/> 
1

只需添加到kjhughes答案/本answer here,你可能会想结合使用身份转换以毫无损伤地复制文档的其余部分:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

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

    <xsl:template match="@name[ancestor::property]"> 
     <xsl:attribute name="name"> 
      <xsl:value-of select="concat(translate(substring(., 1, 1), 
          'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 
          'abcdefghijklmnopqrstuvwxyz'), substring(., 2))"/> 
     </xsl:attribute> 
    </xsl:template> 

</xsl:stylesheet>