2015-01-29 3 views
1

대문자에서 소문자로 변환해야하는 요구 사항이 있습니다. 그러나 첫 번째 문자는 대문자로 남겨 두어야합니다.XSLT 1.0을 사용하여 대문자를 소문자로 변환하지만 첫 문자는 대문자로 유지되어야합니다.

입력 : <LineStatus>DELETED</LineStatus>

예상 출력 : 다음

<LineStatus>Deleted</LineStatus>deleted

내가 <xsl:value-of select="translate(substring(DELETED,1,1), $smallcase, $uppercase)" />처럼 뭔가를 시도했지만 그것이 내 주면서이 출력을 줄 것이다

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

코드를입니다 내가 출력 d

누구든지 조언 해주실 수 있습니까?

UPDATE는

내가있는 내가이

<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> 
+1

당신은을 선언해야 일을하고있는 중이 템플릿을 만들었습니다' 비누'네임 스페이스를 사용하여 XSL 문서에서 '/ * [local-name() = 'Envelope']'단순히'/ soap : Envelope'을 사용할 수 있습니다. – Tomalak

+0

@Tomalak 감사합니다. XSL을 업데이트 할 예정입니다. 그러나 그것은 내가 달성하고자하는 것에 영향을 미칩니 까? –

+0

아니, 그래서 나는 그것을 코멘트로 썼다. XPath를 좀 더 관리하기 쉽게 만듭니다. 아래의 마이클의 대답은 당신의 해결책입니다. – Tomalak

답변

2
<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> 
+1

Michael과 Tomalak에게 해결책이 적용되었습니다. 코드를 수정해야만했습니다. 내가 한 유일한 변화는 $ LineStatus로 선언되었고 두 요소 모두에

관련 문제