Está en la página 1de 10

Procesamiento de archivos XML (Parte 1)

Rubby Casallas Departamento de Ingeniera de Sistemas Universidad de los Andes

Arquitectura de Software

Referencias

Esta presentacin es un breve resumen de XML y no pretende ser exhaustiva. Para ms informacin por favor consultar las siguientes referencias: http://www.xml.com/axml/testaxml.htm: especificacin 1.0 de XML comentada. http://java.sun.com/webservices/docs/ea2/tutorial/doc/J AXPIntro.html: tutorial de JAXP http://www.javaworld.com/javaworld/jw-05-2002/jw-0517sax.html: generacin de parsers sax

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

Arquitectura de Software

Agenda
1. SAX 2. XSLT 3. DOM

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

Arquitectura de Software

Procesamiento de documentos XML


Parser dirigidos por eventos: SAX Parser dirigidos por la estuctura: DOM Lenguajes de transformacin DSSSL, XSL

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

Arquitectura de Software

Simple API for XML: SAX


SAX no es un Parser es una interface estndar basada en eventos para hacer parser de documentos XML Es una interface comn implementada por varios parsers Un parser SAX requiere poca memoria porque no construye una representacin interna del archivo XML

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

Arquitectura de Software

Simple API for XML: SAX


Es una interface programable de un parser de documentos XML basado en eventos. A medida que el parser encuentra un elemento, en el archivo XML, lo va reportando. Quiere decir que el parser no guarda en memoria ninguna representacin del documento (contrario a DOM) Los eventos que se reportan a la aplicacin son:

start Element start Document end Element

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

Arquitectura de Software

<?xml version="1.0"?> <nombreCompleto> <apellido>Casallas</apellido> <nombre>Rubby</nombre> </nombreCompleto>

Events
start document start element: nombreCompleto start element: apellido characters: Casallas end element: apellido start element: nombre characters: Rubby end element: nombre end element: nombreCompleto end document

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

Arquitectura de Software

Simple API for XML: SAX


La aplicacin debe implementar manejadores de los eventos La aplicacin debe crear un(s) objeto de una clase que implemente la interface para manejar eventos. Este objeto se registra con el parser y, de acuerdo con los eventos que el parser genere, se invocan los mtodos de procesamiento que se definieron en la aplicacin. Por ejemplo: Evento

start document se invoca el mtodo startDocument(...) sobre el objeto que est registrado!

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

Arquitectura de Software

JAXP
JAXP es la interface programable para procesar XML desde java Permite programar usando SAX, DOM y XSLT El paquete principal es: javax.xml.parsers package. Provee dos clases para crear parsers (independientes del proveedor):

SAXParserFactory DocumentBuilderFactory

Esto permite cambiar la implementacin del parser de XML sin cambiar el cdigo de la aplicacin.

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

Arquitectura de Software

Interfaces de SAX

ContentHandler: declara los mtodos: startDocument, endDocument, startElement, endElement (estos son invocados cuando un tag xml es encontrado) characters es invocado cuando el parser encuentra un texto en un elemento xml processingInstruction cuando encuentra una instruccin de procesamiento

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

10

Arquitectura de Software

Interfaces de SAX

ErrorHandler los mtodos: error, fatalError y warning son invocados en respuesta a varios tipos de error en el parser Por defecto se dispara una excepcin para errores fatales y se ignoran otros errores incluyecdo los de validacin. Para manejar los errores, de acuerdo con alguna poltica de la aplicain, se debe suministrar al parser un manejador de errores propio.

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

11

Arquitectura de Software

Interfaces de SAX

DTDHandler Se usa cuando se procesa un DTD para reconocer y manipular declaraciones de una entidad unparsed. Por ejemplo:
<!ENTITY mom-picture SYSTEM "http://www.home.com/mom.jpg" NDATA JPEG>

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

12

Arquitectura de Software

Interfaces de SAX

EntityResolver Tiene un mtodo para localizar entidades dado un URI

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

13

Arquitectura de Software

Creacin de un objeto parser


Se tiene que tener un objeto fbrica que cree el objeto parser. Para tener el objeto fbrica apropiado (dependiendo del parser que se desee usar: xalan, xt, o el que viene por defecto con la implementacin java) se invoca:
// Use the default (non-validating) parser SAXParserFactory factory = SAXParserFactory.newInstance(); Para resolver cul tipo de parser crear, se usa, en primer lugar, la configuracin que est definida en: javax.xml.parsers.SAXParserFactory system property (ver la documentacin de la clase SAXParserFactory)
Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

14

Arquitectura de Software

Creacin de un objeto parser (2)

Sobre el objeto factoria, se invoca la creacin de un parser de tipo SAX:


parser SAXParserFactory factory = SAXParserFactory.newInstance();

try { SAXParser saxParser = factory.newSAXParser(); ... } catch (Throwable t) { t.printStackTrace(); }

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

15

Arquitectura de Software

Asociacin de un manejador de eventos al parser.

Al parser creado se le asocia una referencia a un objeto que manejar los eventos:
parser SAXParserFactory factory = SAXParserFactory.newInstance();

try { SAXParser saxParser = factory.newSAXParser(); saxParser.parse( new File(argv[0]), handler ); } catch (Throwable t) { t.printStackTrace(); } Esta es una referencia a una instancia de un manejador de eventos (una clase que implementa la interface Rubby Casallas G. ContentHandler) Departamento de Ingeniera de Sistemas
Universidad de los Andes

16

Arquitectura de Software

Asociacin de un manejador de eventos al parser (cont.)


La referencia al manejador de eventos puede asociarse al parser y cambiarse en cualquier momento.
parser SAXParserFactory factory = SAXParserFactory.newInstance();

try { SAXParser saxParser = factory.newSAXParser(); saxParser.getXMLReader().setContentHandler (handler); saxParser.parse( new File(argv[0])); } catch (Throwable t) { t.printStackTrace(); } Se le est indicando al parser cul es la referencia que va a manejar los eventos
17

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

Arquitectura de Software

El (los) manejador(es) de eventos


public class DefaultHandler extends java.lang.Object implements EntityResolver, DTDHandler, ContentHandler, ErrorHandler

Contiene implementaciones por defecto para todos los mtodos de las interfaces SAX. Se debe extender esta clase para sobre cargar los mtodos que se necesiten:

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

18

Arquitectura de Software public class Echo extends DefaultHandler { public void startElement(...) throws SAXException { ... } public void { ... } ... // otros mtodos que se necesite sobrecargar } endElement(...) throws SAXException

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

19

Arquitectura de Software

public void startElement(java.lang.String uri, java.lang.String localName, java.lang.String qName, Attributes attributes) throws SAXException { if (qName.equals (courseInfo")) { String id = attributes.getValue(id"); String header = Curso: "+id; System.out.println (header); System.out.println (); } }

Rubby Casallas G. Departamento de Ingeniera de Sistemas Universidad de los Andes

20

10

También podría gustarte