2013-12-11 2 views
1

에서 현재 노드의 문자열 가져 오기 :나는이 XML 입력이 XSLT

<?xml version="1.0" encoding="utf-8"?> 
<Document> 
    <TopLevel> 
    <Payments> 
     <PaymentID>PID1</PaymentID> 
     <Transaction> 
     <TransID>TR1-PID1XX</TransID> 
     <TransNumber>1</TransNumber> 
     </Transaction> 
     <Transaction> 
     <TransID>TR1-PID1XY</TransID> 
     <TransNumber>2</TransNumber> 
     </Transaction> 
     <Transaction> 
     <TransID>TR1-PID1XX</TransID> 
     <TransNumber>3</TransNumber> 
     </Transaction> 
    </Payments> 
    <Payments> 
     <PaymentID>PID2</PaymentID> 
     <Transaction> 
     <TransID>TR2-PID2XY</TransID> 
     <TransNumber>4</TransNumber> 
     </Transaction> 
     <Transaction> 
     <TransID>TR2-PID2XX</TransID> 
     <TransNumber>5</TransNumber> 
     </Transaction> 
     <Transaction> 
     <TransID>TR2-PID2XY</TransID> 
     <TransNumber>6</TransNumber> 
     </Transaction> 
    </Payments> 
    </TopLevel> 
</Document> 

을 그리고 이것은 내 XSLT입니다 :

내 XSLT는 현재 노드의 문자열을 따기되지
<xsl:template match="Transaction"> 
    <Transaction> 
     <xsl:apply-templates select="TransID"/> 
    </Transaction> 
    </xsl:template> 

    <xsl:template match="TransID"> 
    <TransID> 
     <xsl:value-of select="."/> 
    </TransID> 
    <TransNumber> 
     <xsl:number level="any"/> 
    </TransNumber> 
    <xsl:if test="substring(//TransID,9,2)='XX'"> 
     <TransCode> 
     <xsl:value-of select ="substring(//TransID,1,3)"/> 
     </TransCode> 
    </xsl:if> 
    </xsl:template> 

하지만, 대신에 항상 첫 번째 노드 문자열을 얻고 있습니다. 내가 여기에서 놓친 것이 무엇입니까? 이 멋진 커뮤니티에 대한 모든

<Payments> 
    <PaymentID>PID1</PaymentID> 
    <Transaction> 
    <TransID>TR1-PID1XX</TransID> 
    <TransNumber>1</TransNumber> 
    <TransCode>TR11</TransCode> 
    </Transaction> 
    <Transaction> 
    <TransID>TR1-PID1XY</TransID> 
    <TransNumber>2</TransNumber> 
    </Transaction> 
    <Transaction> 
    <TransID>TR1-PID1XX</TransID> 
    <TransNumber>3</TransNumber> 
    <TransCode>TR13</TransCode> 
    </Transaction> 
</Payments> 
<Payments> 
    <PaymentID>PID2</PaymentID> 
    <Transaction> 
    <TransID>TR2-PID2XY</TransID> 
    <TransNumber>4</TransNumber> 
    </Transaction> 
    <Transaction> 
    <TransID>TR2-PID2XX</TransID> 
    <TransNumber>5</TransNumber> 
    <TransCode>TR25</TransCode> 
    </Transaction> 
    <Transaction> 
    <TransID>TR2-PID2XY</TransID> 
    <TransNumber>6</TransNumber> 
    </Transaction> 
</Payments> 

감사합니다 :)

답변

1

그것의 당신은 항상 전체 문서의 모든 TransID 노드를 검색하기 때문에 : 그런데

여기에 내 원하는 출력됩니다. 또한, 노드 집합의 substring은 집합의 첫 번째 노드에 대해 항상 작동하므로 첫 번째 노드를 항상 찾습니다.

아래 코드로 변경하면 정상적으로 작동합니다.

<xsl:if test="substring(./text(),9,2)='XX'"> 
    <TransCode> 
    <xsl:value-of select ="substring(./text(),1,3)"/> 
    </TransCode> 
</xsl:if> 
+0

좋은 해결책, thanks man :) – zyberjock