viernes, 6 de julio de 2012

La línea following de XPath

La línea following de XPath contiene todos los nodos que empiezan después del nodo de contexto.

El analizador procesa los documento XML de la misma manera que un lector lee un documento en la cultura occidental, o sea, de izquierda a derecha y de arriba a abajo. Este extremo es importante para predecir qué nodos serán seleccionados por la línea axis que apliquemos.

En siguiente ejemplo, al igual que otros ejemplos de las entradas relativas a las líneas XPath utilizaremos el documento XML de la entrada "La línea descendant de XPath"

Por ello, en el ejemplo que sigue, si señalamos como nodo de contexto el X/B/R/B, el conjunto de nodos dado la línea following, (más la clase de nodo node()) estará constituido por todos los nodos del árbol que estén a la derecha y considerados de arriba a abajo, en el presente caso serán cinco nodos.

Ejemplo nº1, la línea following de XPath

Hoja de transformación:

          <?xml version="1.0" encoding="UTF-8" ?>

<!-- New document created with EditiX at Thu Jul 05 18:01:36 BST 2012 -->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
 <xsl:strip-space elements="*"/>
 <xsl:template match="/">
  <xsl:copy-of select="X/B/R/B/following::node()"/>
 </xsl:template>
</xsl:stylesheet>

Salida:

<C>
   <F>
      <Z/>
      <N/>
      <M/>
   </F>
</C>

<F>
   <Z/>
   <N/>
   <M/>
</F>

<Z/>
<N/>
<M/>
        

En la siguiente representación del árbol XML en el que he aplicado la hoja de transformación pueden ver el nodo de contexto y los nodos que constituyen el resultado de la línea following

jueves, 5 de julio de 2012

La línea descendant-or-self de XPath

Esta línea contiene el propio nodo de contexto y todos los descendientes de ese nodo.

En el siguiente ejemplo el fichero de entrada es el mismo que el de la entrada "La línea descendant de XPath"

Ejemplo nº1, la línea descendant-or-self de XPath

Hoja de transformación:

          <?xml version="1.0" encoding="UTF-8" ?>

<!-- New document created with EditiX at Thu Jul 05 18:01:36 BST 2012 -->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
 <xsl:strip-space elements="*"/>
 <xsl:template match="/">
  <xsl:copy-of select="X/B/G/descendant-or-self::node()"/>
 </xsl:template>
</xsl:stylesheet>

Salida:

<G> <E/> <G/> <Y/> </G> <E/> <G/> <Y/>

En el siguiente esquema puedes ver el resultado de aplicar al árbol XMl la línea descendant-or-self. No cambié el color del nodo de contexto porque este nodo también resulta elegido por la línea.