2012-07-27 83 views
5

我被堅持與前面的兄弟相關的邏輯,xsl - 最後一位兄弟姊妹

試圖保持XML簡單。

<order> 
<orderList> 
<itemid><id>100</id></itemid> 
<itemid><id>100</id></itemid> 
<itemid><id>111</id></itemid> 
<itemid><id>111</id></itemid> 
<itemid><id>123</id></itemid> 
<itemid><id>324</id></itemid> 
<itemid><id>244</id></itemid> 
<itemid><id>244</id></itemid> 
</orderList> 
</order> 

我想找到使用下面的xsl每個節點的前面的兄弟姐妹。我需要使用每個循環中更大的XSL,以適應這種邏輯...

<html> 
    <body> 
    <table border="1"> 
    <xsl:for-each select="order/orderList/itemid"> 
     <tr> 
     <td>itemid</td> 
     <td><xsl:value-of select="id" /> </td> 
     <td> <xsl:value-of select="preceding-sibling::node()"/> </td> 
     </tr> 
     </xsl:for-each> 
    </table>  
    </body> 
    </html> 
</xsl:template> 

I get these Results 

itemid 100 
itemid 100 100 
itemid 111 100 
itemid 111 100 - expecting 111 
itemid 123 100 - expecting 111 etc 
itemid 324 100 
itemid 244 100 
itemid 244 100 

任何幫助嗎?

回答

6

在XSLT 1.0中,當給定節點集時xsl:value - 返回該節點集中第一個節點的字符串值,按照文檔順序。 (XSLT 2.0返回節點集中所有節點的字符串值)。

preceding-sibling :: node()返回一個節點集,其中包含節點的所有前面的兄弟節點。

如果您只想要最後的兄弟姐妹,請使用preceding-sibling :: * [1]。

+0

感謝您的快速回復!,它的工作原理 – Sr7 2012-07-27 02:52:02

+0

michael,請您解釋一下「* [1]」的語法是什麼意思? – appleLover 2013-11-16 02:35:24

+0

:::表示選擇元素,無論其名稱如何,[1]表示選擇第一個(按軸順序)(這是​​文檔順序中的最後一個)。 – 2013-11-17 16:35:03