使用 XSLT 1.0 将大写字母转换为小写字母,但第一个字符应保持大写
Converting uppercase to lowercase using XSLT 1.0 however first character should remain caps
我有一个要求,我需要将大写字母转换为小写字母。但是第一个字母应该保持大写。
输入:<LineStatus>DELETED</LineStatus>
预期输出:<LineStatus>Deleted</LineStatus>
下面是代码
`<xsl:template match="/">
<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:value-of select="translate(DELETED, $smallcase, $uppercase)" />
</xsl:template>`
这将给出输出 deleted
我试过类似 <xsl:value-of select="translate(substring(DELETED,1,1), $smallcase, $uppercase)" />
的东西,但它给了我输出 d
谁能指点一下?
更新
我已经创建了一个模板,我正在其中执行此操作
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<<xsl:variable name="LineStatus" select="//OrderResponse/OrderResponseBody/OrderResponseDetails/OrderResponseProductLineItem/LineStatus/text()"/>
<xsl:variable name="change"><xsl:value-of select="substring($LineStatus, 1, 1)"/></xsl:variable>
<xsl:variable name="RSRIden" select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='OrderResponse']/*[local-name()='OrderResponseBody']/*[local-name()='OrderResponseDetails']/*[local-name()='OrderResponseProductLineItem']/*[local-name()='SpecialInstructions' and @*[local-name()='InstructionType' and normalize-space(.) = 'PostingInstructions']]"/>
<xsl:variable name="RSRDescri" select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='OrderResponse']/*[local-name()='OrderResponseBody']/*[local-name()='OrderResponseDetails']/*[local-name()='OrderResponseProductLineItem']/*[local-name()='SpecialInstructions' and @*[local-name()='InstructionType' and normalize-space(.) = 'ShipperInstructions']]"/>
<xsl:template name="Reject-Status">
<ResponseStatus>
<ResponseStatusReasonIdentifier Agency="ResponseCode">
<xsl:value-of select="$RSRIden"/>
</ResponseStatusReasonIdentifier>
<ResponseStatusReasonDescription>
<xsl:value-of select="$RSRDescri"/>
</ResponseStatusReasonDescription>
</ResponseStatus>
<!--<LineStatus><xsl:value-of select="translate($change,$uppercase,$smallcase)" /></LineStatus>-->
</xsl:template>
</xsl:stylesheet>
改成这个并且有效
<LineStatus><xsl:value-of select="substring($LineStatus, 1, 1)"/><xsl:value-of select="translate(substring($LineStatus,2),$uppercase,$smallcase)" /></LineStatus>
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:template match="/">
<xsl:value-of select="substring(LineStatus, 1, 1)"/>
<xsl:value-of select="translate(substring(LineStatus, 2), $uppercase, $lowercase)" />
</xsl:template>
我有一个要求,我需要将大写字母转换为小写字母。但是第一个字母应该保持大写。
输入:<LineStatus>DELETED</LineStatus>
预期输出:<LineStatus>Deleted</LineStatus>
下面是代码
`<xsl:template match="/">
<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:value-of select="translate(DELETED, $smallcase, $uppercase)" />
</xsl:template>`
这将给出输出 deleted
我试过类似 <xsl:value-of select="translate(substring(DELETED,1,1), $smallcase, $uppercase)" />
的东西,但它给了我输出 d
谁能指点一下?
更新
我已经创建了一个模板,我正在其中执行此操作
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<<xsl:variable name="LineStatus" select="//OrderResponse/OrderResponseBody/OrderResponseDetails/OrderResponseProductLineItem/LineStatus/text()"/>
<xsl:variable name="change"><xsl:value-of select="substring($LineStatus, 1, 1)"/></xsl:variable>
<xsl:variable name="RSRIden" select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='OrderResponse']/*[local-name()='OrderResponseBody']/*[local-name()='OrderResponseDetails']/*[local-name()='OrderResponseProductLineItem']/*[local-name()='SpecialInstructions' and @*[local-name()='InstructionType' and normalize-space(.) = 'PostingInstructions']]"/>
<xsl:variable name="RSRDescri" select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='OrderResponse']/*[local-name()='OrderResponseBody']/*[local-name()='OrderResponseDetails']/*[local-name()='OrderResponseProductLineItem']/*[local-name()='SpecialInstructions' and @*[local-name()='InstructionType' and normalize-space(.) = 'ShipperInstructions']]"/>
<xsl:template name="Reject-Status">
<ResponseStatus>
<ResponseStatusReasonIdentifier Agency="ResponseCode">
<xsl:value-of select="$RSRIden"/>
</ResponseStatusReasonIdentifier>
<ResponseStatusReasonDescription>
<xsl:value-of select="$RSRDescri"/>
</ResponseStatusReasonDescription>
</ResponseStatus>
<!--<LineStatus><xsl:value-of select="translate($change,$uppercase,$smallcase)" /></LineStatus>-->
</xsl:template>
</xsl:stylesheet>
改成这个并且有效
<LineStatus><xsl:value-of select="substring($LineStatus, 1, 1)"/><xsl:value-of select="translate(substring($LineStatus,2),$uppercase,$smallcase)" /></LineStatus>
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:template match="/">
<xsl:value-of select="substring(LineStatus, 1, 1)"/>
<xsl:value-of select="translate(substring(LineStatus, 2), $uppercase, $lowercase)" />
</xsl:template>