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

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

Fraga 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