2012-04-20 11 views
14

Soy bastante nuevo en XSLT y esta es mi XML:Como llegar al siguiente hermano en XSLT

<projects> 
    <project> 
     <number>1</number> 
     <title>Project X</title> 
    </project> 
    <project> 
     <number>2</number> 
     <title>Project Y</title> 
    </project> 
    <project> 
     <number>3</number> 
     <title>Project Z</title> 
    </project> 
</projects> 

Si tengo un proyecto y quiero conseguir el hermano que le sigue, ¿cómo puedo hacer que ?

Este código no parece funcionar para mí:

/projects[title="Project X"]/following-sibling 

Respuesta

28

Esto es realmente una cuestión completamente XPath.

Uso:

/*/project[title = 'Project X']/following-sibling::project[1] 

Esto selecciona cualquier primer tras hermanos Project de cualquier elemento Project que es un hijo del elemento superior en el documento XML y el valor de cadena de al menos de uno de sus title children es la cadena "Project X".

XSLT - basado verificación:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
     "/*/project[title = 'Project X']/following-sibling::project[1]"/> 
</xsl:template> 
</xsl:stylesheet> 

Cuando se aplica esta transformación en el documento XML proporcionado:

<projects> 
    <project> 
     <number>1</number> 
     <title>Project X</title> 
    </project> 
    <project> 
     <number>2</number> 
     <title>Project Y</title> 
    </project> 
    <project> 
     <number>3</number> 
     <title>Project Z</title> 
    </project> 
</projects> 

la expresión XPath se evalúa y el elemento seleccionado correctamente, se copia a la salida:

<project> 
    <number>2</number> 
    <title>Project Y</title> 
</project> 
+0

Hola Dimitre, eso funciona a las mil maravillas. ¡Muchas gracias! – Tintin81

+0

@ Tintin81: De nada. –

Cuestiones relacionadas