2013-12-11 91 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:

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

我的XSLT是不是撿了當前節點的子串,但而是總是得到第一個節點的字符串,我在這裏錯過了什麼?

順便說這裏是我想要的輸出:

<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

不錯的解決方案,謝謝:) – zyberjock