lunes, 8 de diciembre de 2008

Max y Min en XPath

Antes de que me olvide: como XPath no soporta funciones que devuelvan máximos y mínimos de manera natural, lo que debemos hacer es filtrar los nodos eliminando aquellos que tienen un nodo mayor, antes (preceding-sibling) o después (following-sibling). De esa forma podemos obtener el nodo deseado.

Ejemplo:

Con un XML que contenga...

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="max.xsl"?>
<root>
<nodo id="1">12</nodo>
<nodo id="2">17</nodo>
<nodo id="3">58</nodo>
<nodo id="4">33</nodo>
</root>

y un XSL que diga...

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="root">
root contiene <xsl:value-of select="count(node())"/> nodos.<br/>
El mayor valor es <xsl:value-of
select="nodo[not(preceding-sibling::nodo &gt; .)
and not(following-sibling::nodo &gt; .)]"/><br/>
El menor valor es <xsl:value-of
select="nodo[not(preceding-sibling::nodo &lt; .)
and not(following-sibling::nodo &lt; .)]"/><br/>
</xsl:template>
</xsl:stylesheet>

... dará como resultado...

Root contiene 4 nodos.
El mayor valor es 58
El menor valor es 12

3 comentarios:

[Viajero] Milan Banjanin dijo...

Puedo decir algo? no entendi un catzo!!!

Saludos Abrutados

Dany Vázquez - Axxonita dijo...

¡JUAZ!
¿Qué tal, Milan? ¿Cómo va eso?
En realidad este post fue más un autorecordatorio que otra cosa, pero puede que le sirva a alguien (tal como me ha servido a mí la primera vez que encontré algo sobre este tema).
Si quieres, te cuento un poco más, por esta vía o por privado.
Lo importante es que SE PUEDE VIVIR sin saber qué significa :)

Anónimo dijo...

pues ya estais mas aqui que en el otro blog... porque no pones todo en uno mismo??? claro con difrentes etiquetas no???? yo tenia tres blogs y me dije: todo a uno mismo, tanto por bloguear y tan poco tiempo!

: )

y ponme tis coments en mi bloguis pa presumirlos compa, los que emenvias via e-miliano jejejejeje