2012-07-27 8 views
5

Estoy atascado con una lógica relacionada con el hermano anterior,xsl - último hermano anterior

Tratando de mantener XML simple.

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

Estoy tratando de encontrar el hermano anterior para cada nodo usando debajo de xsl. Tengo que utilizar para cada lazo para adaptarse a esta lógica en un XSL más 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 

cualquier ayuda por favor?

Respuesta

6

En XSLT 1.0, xsl: value-of cuando se le asigna un conjunto de nodos, devuelve el valor de cadena del primer nodo en ese conjunto de nodos, tomado en orden de documento. (XSLT 2.0 devuelve los valores de cadena de todos los nodos en el conjunto de nodos).

previous-sibling :: node() devuelve un conjunto de nodos que contiene todos los hermanos anteriores de un nodo.

Si solo desea el último hermano anterior, utilice previous-sibling :: * [1].

+0

¡Gracias por la rápida respuesta !, funciona – Sr7

+0

michael, ¿podría explicar qué significa la sintaxis "* [1]"? – appleLover

+0

The :: * significa seleccionar elementos, cualquiera que sea su nombre, y [1] significa seleccionar el primero (en orden de ejes) (que es el último en el orden de los documentos). –

Cuestiones relacionadas