如何使用XPath或XSLT将首字母更改为小写

5

我正在使用wso2esb-4.8.1。

我想要将我的请求的第一个字母改为小写。 我得到了这样的请求参数:

 <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?


我该如何在表达式中使用fn:lower-case()?像这样使用它:<property expression="{fn:lower-case(get-property('MARKET'))}" name="LOWERCASE_MARKET" scope="default" type="STRING"/>会出现错误:属性'expression'的XPath表达式无效。 - user666
2个回答

6

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的回答/在这里的回答,你可能想要与身份转换一起使用,以无损复制文档的其余部分:

<?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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接