XSLT

Ordenando un fichero XML

Creado: 28/Nov/2009 Actualizado: 27/Ago/2021

Cada día tratamos más fuentes de información basadas en XML. Ficheros que intercambiamos, bases de datos basadas en XML o simplemente registros que contienen información variopinta.

Podemos apoyarnos en XSLT para dejar ordenado un fichero XML. Y al igual que cuando tratamos una base de datos, podemos dejarle ordenado por el campo que nosotros queramos.

Lo primero que tenemos que hacer es definir el XML sobre el que vamos a recuperar la información. Utilizaremos la misma estructura de libros que utilizamos en el resto de los ejemplos:



  
    Fuente Ovejuna
    Lope de Vega
    84-9815-002-7
  
  
    La Celestina
    Fernando de Rojas
    84-96390-96-9
  
  
    Don Juan Tenorio
    Jose Zorilla
   84-96390-97-7
  

En primer lugar vamos a recorrer los elementos que queremos mostrar. En nuestro caso mostraremos los libros y autores de los mismos. Esto lo podemos llevar a cabo con la etiqueta xsl:for-each, la cual, mediante el atributo select demarca el path del documento XML sobre el que queremos iterar. El path elegido será libros/libro.

En el caso de que queramos recuperar los valores de un elemento en concreto utilizamos la etiqueta xsl:value-of. En este etiqueta, al igual que en la etiqueta xsl:for-each, el atributo select nos indicará el elemento a recuperar.

Al final nos quedará un código como el que vemos:


 

Titulo:
Autor:

Vemos que nuestro documento XSLT combina etiquetas de transformación (etiquetas del namespace xsl) y etiquetas XHTML que conformarán el documento definitivo, obtenido tras la transformación.

Si solo ponemos este código, nos saldrá la información, pero sin ordenar:

Mis Libros

Titulo:Fuente Ovejuna
Autor:Lope de Vega

Titulo:La Celestina
Autor:Fernando de Rojas

Titulo:Don Juan Tenorio
Autor:Jose Zorilla

Titulo:Lazarillo de Tormes
Autor:Anonimo

Titulo:Fortunata y Jacinta
Autor:Benito Perez Galdos

Titulo:La Colmena
Autor:Camilo Jose Cela

Para ordenar los elementos utilizamos la etiqueta xsl:sort. Esta etiqueta tiene un atributo select que indica el path sobre el que queremos ordenar. Así, si queremos ordenar por nombre del titulo pondríamos la siguiente línea de código:

 

Quedándonos el siguiente listado:

Mis Libros

Titulo:Don Juan Tenorio
Autor:Jose Zorilla

Titulo:Fortunata y Jacinta
Autor:Benito Perez Galdos

Titulo:Fuente Ovejuna
Autor:Lope de Vega

Titulo:La Celestina
Autor:Fernando de Rojas

Titulo:La Colmena
Autor:Camilo Jose Cela

Titulo:Lazarillo de Tormes
Autor:Anonimo

Hay que tener cuidado ya que la ordenación (xsl:sort) tiene que estar dentro de la iteración de elementos (xsl:for-each).

Artículos
Javascript

Abrir una ventana que no se pueda redimensionar

Creado: 10/Nov/2009 Actualizado: 28/May/2015

Una de las cosas que podemos hacer con el método .open() de Javascript a la hora de abrir una ventana en Javascript es forzar a que la nueva tenga un tamaño fijo y que además el usuario no pueda redimensionar.

Para ello simplemente tendremos que jugar con los valores de la características asociadas a la ventana.

Pero primero recordemos como es el método .open() del objeto Window:

window.open (url:string,nombreVentana:string,caracteristicas :string)

De las características de la ventana nos centraremos en height y width para darle un tamaño fijo a la vetana y en resizable para que al abrir la ventana, esta no se pueda redimensionar.

En las dos primeras propiedades utilizamos el tamaño en pixeles, mientras que en la segunda utilizaremos el valor false como indicador para no redimensionar.

El código que nos quedará será el siguiente:

 window.open("http://www.w3api.com", "nuevo", "width=400,height=400,resizable=false");

Una pequeña línea de código en Javascript que nos puede ser muy útil.

Código Fuente

Descárgate el código fuente de Abrir una ventana que no se pueda redimensionar
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star

Vídeos sobre Javascript

Disfruta también de nuestros artículos sobre Javascript en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Javascript

¿Te atreves a probar tus habilidades y conocimiento en Javascript con nuestro test?

Test Javascript
XSLT

Filtrar información en una XSLT

Creado: 06/Nov/2009 Actualizado: 27/Ago/2021

Nuestras hojas de transformación no se tienen que limitar a recuperar toda la información de un fichero XML y a ponerla en otro tipo de formato. Puede ser que cierta información del documento no nos interese, o tenga que ser evaluada. Es por ello que puede darse el caso de que necesitemos filtrar información en una XSLT.

Para poder realizar esa evaluación de datos nos podemos apoyar en estructuras condicionales como xsl:if, xsl:choose y las funciones que tiene el lenguaje XSL.

Siguiendo al resto de los ejemplos XSLT de nuestra web, vamos a utilizar el fichero XML con los datos de los libros. Pero en este caso vamos a añadir un nuevo campo en la estructura. Este nuevo campo será el precio del libro. El fichero de libros nos quedará así:



  
    Fuente Ovejuna
    Lope de Vega
    84-9815-002-7
    24
  
  
    La Celestina
    Fernando de Rojas
    84-96390-96-9
    32
  
  ...

La condición de nuestra hoja de transformación será el generar un listado de libros, pero siempre y cuando, estos, tengan un precio superior o igual a 30 euros.

Para ello lo primero que tenemos que hacer es mostrar el listado de libros. Esto lo conseguimos con una estructura repetitiva del tipo xsl:for-each. En medio de esta estructura, utilizando etiquetas xsl:value-of mostramos la información del titulo del libro, autor y precio del mismo. Tendremos el siguiente código:


  

Titulo:
Autor:
Precio:

El código anterior nos va a sacar todos los libros que tengamos definidos en nuestra estructura XML. Todavía no hemos ejecutado el filtro. Para aplicar el filtro utilizamos la etiqueta xsl:if. Antes de utilizarla refrescaremos cual es su estructura

 ... 

Como podemos ver, el atributo test es el que nos permite evaluar la condición. Como condición podemos utilizar cualquiera de las funciones que nos da el lenguaje XSLT o simplemente comparar valores de elementos del documento XML contra constantes. Este último caso será el nuestro. Y es que nosotros contrastaremos el valor de un elemento del documento, el precio, contra una constante, 24 (euros € o dolares $ ;-)) Quedándonos al final esta línea de código:

 ... 

En el medio de esta decisión pondremos la extracción de información del libro, es decir, los xsl:value-of. Nuevamente, quedándonos:


  
    

Titulo:
Autor:
Precio:

Artículos
Java

Alinear cadena a la izquierda

Creado: 01/Nov/2009 Actualizado: 25/Ago/2021

Seguimos con los ejemplos de transformación de cadenas y después de ver cómo añadir ceros a la izquierda, ahora veremos como podemos alinear una cadena a la izquierda.

Para ello vamos a volver a utilizar la clase Formatter y el método format(). Aunque podríamos utilizar el método format directamente sobre la clase String. Veremos el ejemplo de las dos formas, ya que lo importante es el patrón de formato a aplicar.

Con la clase Formatter, lo primero será instanciarla.

Formatter fmt = new Formatter();

Lo siguiente ya será aplicar el formato:

Formatter fmt = new Formatter();
fmt = fmt.format("Contenido %-8d unidades", number);

El formato para alinear la cadena a la izquierda lo conseguiremos mediante el flag ‘-‘. Si recordamos el formato de la cadena de conversión sería el primer valor tras el del argumento.

%[argument_index$][flags][width]conversion

Para ver la justificación le damos un tamaño de 8 posiciones y el tipo de conversión será el ‘d’ para los números enteros. El código sería el siguiente:

int number = 4752;
Formatter fmt = new Formatter();
fmt = fmt.format("Contenido %-8d unidades", number);
System.out.println(fmt.toString());

Si queremos hacer esto directamente, sin la clase Formatter, sería utilizar el método format de la siguiente forma:

String formateado = String.format("Contenido %-8d unidades", number);		
System.out.println(formateado);

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java