2012-07-27 9 views
5

Sono bloccato con una logica relativa al fratello precedente,xsl - ultimo fratello precedente

Cercando di mantenere XML semplice.

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

Sto cercando di trovare il fratello precedente per ogni nodo utilizzando sotto xsl. ho bisogno di utilizzare per ogni ciclo per adattarsi questa logica in un xsl più grande ...

<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 

alcun aiuto per favore?

risposta

6

In XSLT 1.0, xsl: valore di quando viene fornito un set di nodi, restituisce il valore di stringa del primo nodo in tale set di nodi, preso nell'ordine del documento. (XSLT 2.0 restituisce i valori stringa di tutti i nodi nel set di nodi).

previous-sibling :: node() restituisce un set di nodi contenente tutti i fratelli precedenti di un nodo.

Se si desidera solo l'ultimo fratello precedente, utilizzare precedente-sibling :: * [1].

+0

Grazie per la rapida risposta !, funziona – Sr7

+0

michael, potresti spiegare cosa significa "* [1]" sintassi? – appleLover

+0

Il :: * significa selezionare gli elementi indipendentemente dal loro nome e [1] significa selezionare il primo (in ordine asse) (che è l'ultimo nell'ordine del documento). –