Apuntes+de+nikaTeleco+24-04-2009

Al inicio de la clase el profesor dio información y posible ayuda en proyectos de carrera libres futuros. De esta forma el proyecto sería público y podríamos participar en concursos como el //google summer of code//. Después seguimos con el resumen de la clase anterior que lo hizo PakitoChus.

Después el profesor nos dejó tiempo para que hiciéramos el ejercicio T2.8 y luego seguimos con el temario de la asignatura.

=**T2.10 Otra forma de procesar XML: filtros SAX**=

Hemos visto que los programas anteriores necesitan siempre cargar el fichero XML. Sin embargo si este es muy extenso es preferible usar filtros SAX que piden un documento como entrada.

Un filtro SAX se organiza como un //stream// de eventos: va leyendo un documento XML y va generando eventos (por ejemplo en fin de etiqueta, para comentarios, etc.). La única desventaja es que es más lento que trabajar directamente con el fichero XML ya que lo lee carácter a carácter y va ejecutando eventos.

Ejemplo en ruby: code require 'rexml/document' #Librerias require 'rexml/streamlistener' include REXML
 * 1) !/usr/bin/ruby

file=ARGV[0] #Nombre del archivo tag=ARGV[1] #Nombre de la etiqueta a buscar dentro del .xml

class Escucha include StreamListener
 * 1) Definimos la clase

def initialize(tag) #Variables de instancia #Equivalen a new para crear un objeto en Java @tag_a_escuchar = tag @escribe = false end
 * 1) Funciones

def tag_start(name, attributes) if (name == @tag_a_escuchar) @escribe = true #El flag se pone a true end end
 * 1) Funciones que responden a eventos

def tag_end(name) if (name == @tag_a_escuchar) @escribe = false end end
 * 1) ¡Funcion corregida!

def text(text) if @escribe puts text end end
 * 1) Esta funcion se llama cada vez que haya texto
 * 1) Si está activado escribe texto

end

listener = Escucha.new(tag) parser = Parsers::StreamParser.new(File.new(file), listener) parser.parse

code Por último vimos un ejemplo del año pasado del bloque T2.10