Dado un nodo de contexto, la línea descendant selecciona los hijos de ese nodo y además los nietos, los biznietos, etc.
La línea descendant no selecciona los atributos de los nodos y tampoco la nombre de espacio.
Para la selección utilizo tanto pasos de localización simplificados como sin simplificar. La notación no simplificada es más intuitiva, pero es más pesada.
Documento XML de ejemplo
<?xml version="1.0" encoding="UTF-8"?> <!-- New document created with EditiX at Wed Jul 04 18:40:54 BST 2012 --> <X> <A> <F> <T/> <K/> <P/> <Q/> </F> <F> <E/> </F> </A> <B> <G> <E/> <G/> <Y/> </G> <J> <E/> </J> <R> <A/> <w/> <Q/> <B/> </R> </B> <C> <F> <Z/> <N/> <M/> </F> </C> </X>
En el siguiente ejemplo debes notar que el nodo de contexto es doble, ya que hay dos nodos con la misma etiqueta, lo cual no es muy académico, pero pese a ello el analizador lo resuelve; por tanto, fíjate que el resultado da como resultado la descendencia de dos nodos.
Ejemplo nº1, línea descendant de XPath
Hoja de transformación:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="/"> <xsl:copy-of select="X/A/F/descendant::node()"/> </xsl:template> </xsl:stylesheet>Salida:
<T/> <K/> <P/> <Q/> <E/>
Recordemos que existe una notación simplificada de XPath. En el siguiente ejemplo simplificamos mediante (//) la línea descendant. Nota que el resultado es la descendencia de todos los nodos con etiqueta F,
Ejemplo nº2, notación simplificada de la línea descendant
Hoja de transformación:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="/"> <xsl:copy-of select="//F/descendant::node()"/> </xsl:template> </xsl:styleshee>Salida:
<T/> <K/> <P/> <Q/> <E/> <Z/> <N/> <M/>
No hay comentarios:
Publicar un comentario