57
1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista [email protected] http:// www.lsi.dsc.ufcg.edu.br

1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista [email protected]

Embed Size (px)

Citation preview

Page 1: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

1

XML API: DOM e SAX

Prof. Dr. Cláudio [email protected]

http://www.lsi.dsc.ufcg.edu.br

Page 2: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

2

Processamento de docs XML Um arquivo XML é um arquivo de

texto Portanto, a manipulação de XML pode

ser feita através da leitura deste texto

Entretanto, existem APIs que facilitam este acesso a um doc XML

Page 3: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

3

Parser XML O parser tem a função de verificar

se um doc XML está sintaticamente correto; ou bem-formado

O parser deve parar o processamento caso o documento não esteja bem-formado (uma exceção é lançada)

Page 4: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

4

Parser XML Lê o doc XML Verifica se é bem-formado Opcionalmente, Valida com um

DTD ou XMLSchema Fornece uma API que facilita a

manipulação do doc XML via aplicação

Page 5: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

5

Processadores XML Três tipos de API para XML parsing:

SAX (Simple API to XML): baseada em eventos

DOM (Document Object Model): objetos/árvore

JDOM (Java Documet Object Model): Objetos/árvores

Page 6: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

6

Processadores XML Há parsers para várias plataformas e

ambientes de software Parsers baseados em SAX são mais

rápidos Parsers baseados em DOM são mais

versáteis, pois criam uma versão em memória do documento inteiro

Validação tende a ser mais lenta do que verificação

Page 7: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

7

DOM W3C standard recommendation Constrói árvore na memória para documentos XML Um DOM Document é uma coleção de nodes

organizada numa hierarquia DOM provê uma API que permite o programador

adicionar, editar, mover, ou remover nodes em qualquer ponto da árvore

DOM-based parsers fazem o “parsing” destas estruturas. Existe em várias linguagens (Java, C, C++, Python, Perl, etc.)

www.w3.org/DOM/ java.sun.com/webservices/docs/1.0/

tutorial/doc/JAXPDOM.html

Page 9: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

9

DOM Roadmap

Um Parser analiza um arquivo XMLpara criar um DOM documentque é composto de nodesque podem ser elementos, atributos, textos,ou outros tipos de nodeque fazem parte de um (ou mais) Namespace(s)que podem ser acessados via métodosda DOM API

Page 10: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

10

Evolução do DOM

Level 0 - Foi a primeira recomendação que permitia Web browsers identificar e manipular elementos numa página

Level 1- inclui suporte a XML e HTML Level 2- permite o uso de Namespaces,

provê API mais sofisticada com eventos e CSS

Level 3- suporte avançado a Namespaces, eventos de User interface, DTD, XML Schema, Xpath, XSLT

Page 11: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

11

Exemplo <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE ORDERS SYSTEM "orders.dtd"><orders> <order> <customerid limit="1000">12341</customerid> <status>pending</status> <item instock="Y" itemid="SA15"> <name>Silver Show Saddle, 16 inch</name> <price>825.00</price> <qty>1</qty> </item> <item instock="N" itemid="C49"> <name>Premium Cinch</name> <price>49.00</price> <qty>1</qty> </item> </order> <order> <customerid limit="150">251222</customerid> <status>pending</status> <item instock="Y" itemid="WB78"> <name>Winter Blanket (78 inch)</name> <price>20</price> <qty>10</qty> </item> </order></orders>

Page 12: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

12

Exemplo (cont)

Page 13: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

13

DOMParser DOMParser estende XMLParser Métodos importantes

void parse(InputSource source) Executa o parsing em source

void parse(java.lang.String systemId) Executa o parsing sobre o arquivo

identificado por systemId Document getDocument()

Retorna o documento

Page 14: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

14

Interface Node Corresponde a um nó na árvore DOM Node pode ser usado para referenciar:

Elementos Atributos Texto Comentários Seções CDATA Entidades Documentos inteiros PI

Page 15: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

15

Tipos básicos de nodes Document Element Attribute Text

Page 16: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

16

DOM Introdução

DOM treeCada node representa um elemento, atributo, etc.

<?xml version = "1.0"?><message from = ”Ana" to = ”Marta"> <body>Oi Marta!</body></message>

Node criado para elemento messageElemento message tem element child node: elemento body Elemento body tem text child node: “Oi Marta!"Atributos from e to também têm nodes na árvore

Page 17: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

17

Implementações de DOM

DOM-based parsersMicrosoft msxmlSun Microsystem JAXP

Parser Descrição

JAXP Sun Microsystem Java API para XMLParsing (JAXP) é livremente disponívelem java.sun.com/xml.

XML4J IBM XML Parser for Java (XML4J) élivremente disponível emwww.alphaworks.ibm.com/tech/xml4j.

Xerces Apache Xerces Java Parser é livrementedisponível em xml.apache.org/xerces.

msxml Microsoft XML parser (msxml) version2.0 é embutido no Internet Explorer5.5. Version 3.0 está livrementedisponível em msdn.microsoft.com/xml.

4DOM 4DOM é um parser para linguagem Python,disponível livremente emfourthought.com/4Suite/4DOM.

XML::DOM XML::DOM é um módulo Perl que permitemanipular documentos XML usando Perl.Visitewww-4.ibm.com/software/developer/library/xml-perl2.

Page 18: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

18

DOM: classes e interfaces.

Class/Interface Descrição

Document interface Representa o top-level node do documento XML, que provê acesso atodos os demais nodes—incluindo o elemento root.

Node interface Representa um XML document node.NodeList interface Representa uma lista de Node objects.Element interface Representa um elemento node. Deriva de Node.Attr interface Representa um atributo node. Deriva de Node.CharacterDatainterface

Representa character data. Deriva de Node.

Text interface Representa um text node. Deriva de CharacterData.Comment interface Representa um node comentário. Deriva de CharacterData.

ProcessingInstructioninterface

Representa um processing instruction node. Deriva de Node.

CDATASection interface Representa um CDATA section. Deriva de Text.

Page 19: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

19

Alguns métodos de Document

Método Descrição

createElement Cria um element node.createAttribute Crira um attribute node.createTextNode Cria um text node.createComment Cria um comment node.createProcessingInstruction Cria um processing instruction node.createCDATASection Cria um CDATA section node.getDocumentElement Retorna to elemento rootappendChild Concatena um child node.getChildNodes Retorna os child nodes.

Page 20: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

20

Métodos Node

Método Descrição

appendChild Concatena um child node.cloneNode Duplica o node.getAttributes Retorna os atributos do nodegetChildNodes Retorna os nodes filhos do node.getNodeName Retorna o nome do nodegetNodeType Retorna o tipo do node (ex.. elemento, atributo, text,

etc.).getNodeValue Retorna o valor do node.getParentNode Retorna o pai do nodehasChildNodes Retorna true se o node tem nodes filhosremoveChild Remova um node filho do node.replaceChild Troca um node filho com outro node.setNodeValue Coloca o valor do nodeinsertBefore Concatena um node filho na frente de um node filho..

Page 21: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

21

Navegação de um Node

Page 22: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

22

Manipulação de um Node

Page 23: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

23

Alguns tipos de node

Tipo de Node DescriçãoNode.ELEMENT_NODE Representa um element node.Node.ATTRIBUTE_NODE Representa um attribute node.Node.TEXT_NODE Representa um text node.Node.COMMENT_NODE Representa um comment node.Node.PROCESSING_INSTRUCTION_NODE

Representa um processing instructionnode.

Node.CDATA_SECTION_NODE Representa um CDATA section node.

Page 24: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

24

Métodos de Element

Método Descrição

getAttribute Retorna um valor de atributo.getTagName Retorna um nome de elementoremoveAttribute Remove um atributo de um elementosetAttribute Coloca um valor de atributo

Page 25: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

25

Parsing um arquivo XML num documento Processo em 3 passos

1. Criar o DocumentBuilderFactory. Este objeto criará o DocumentBuilder.

2. Criar o DocumentBuilder. O DocumentBuilder fará o atual parsing criar o objeto Document.

3. Fazer o parsing do arquivo para criar o objeto Document.

Page 26: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

26

Exemplo de aplicação básica

import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import java.io.File;import org.w3c.dom.Document;

public class OrderProcessor { public static void main (String args[]) { File docFile = new File("orders.xml"); Document doc = null; try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); doc = db.parse(docFile); } catch (Exception e) { System.out.print("Problem parsing the file."); } }}

Page 27: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

27

Ex de aplicação básicaimport javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import java.io.File;import org.w3c.dom.Document;import org.w3c.dom.Element;public class OrderProcessor {

...System.exit(1);

}//Passo 1: obtém o elemento raiz (root) Element root = doc.getDocumentElement();System.out.println("The root element is " + root.getNodeName());}

}

Page 28: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

28

Ex de aplicação básica - Obtendo um node filho

...import org.w3c.dom.NodeList;... //PASSO 1: obtém o elemento raiz(root) Element root = doc.getDocumentElement(); System.out.println("The root element is "+root.getNodeName()); //PASSO 2: obtém os filhos (children) NodeList children = root.getChildNodes(); System.out.println("There are "+children.getLength()+" nodes in this document."); }}

Page 29: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

29

Usando getFirstChild() e getNextSibling()

...import org.w3c.dom.Node;...//PASSO 3: processando os filhos (children)for (Node child = root.getFirstChild(); child != null; child = child.getNextSibling()) { System.out.println(child.getNodeName()+" = "+child.getNodeValue()); }}}...

Page 30: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

30

Múltiplos filhos...public class OrderProcessor { private static void stepThrough (Node start) { System.out.println(start.getNodeName()+" = "+start.getNodeValue()); for (Node child = start.getFirstChild(); child != null;child = child.getNextSibling()) { stepThrough(child); } } public static void main (String args[]) { File docFile = new File("orders.xml"); ... System.out.println("There are "+children.getLength() +" nodes in this document."); //PASSO 4: fazendo recursividade stepThrough(root); }}

Page 31: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

31

Resultado:

Page 32: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

32

Manipulando Atributos...import org.w3c.dom.NamedNodeMap;...private static void stepThroughAll (Node start){ System.out.println(start.getNodeName()+" = "+start.getNodeValue()); if (start.getNodeType() == start.ELEMENT_NODE) { NamedNodeMap startAttr = start.getAttributes(); for (int i = 0; i < startAttr.getLength(); i++) { Node attr = startAttr.item(i); System.out.println(" Attribute: "+ attr.getNodeName() +" = "+attr.getNodeValue()); } } for (Node child = start.getFirstChild(); child != null; child = child.getNextSibling()) { stepThroughAll(child); }}

Page 33: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

33

Manipulando Atributos

Page 34: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

34

Edição de documentos XML Existem métodos para

adicionar nodes, remover nodes, mudar valores de nodes

Consulte a API!

Page 35: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

35

SAX Simple API for XML Outro método para acessar o

conteúdo de documentos XML. Desenvolvido por membros da XML-

DEV mailing-list (não é da W3C) Usa um modelo baseado em eventos

Notificações (eventos) ocorrem à medida em que o documento é analizado (“parsed”)

Page 36: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

36

SAX-based Parsers

SAX-based parsersDisponíveis em várias LPs:

e.g., Java, Python, C++, etc.Produto Descrição

JAXP Sun JAXP é disponível em java.sun.com/xml.JAXP suporta SAX e DOM.

Xerces Apache Xerces parser é disponível emwww.apache.org. Xerces suporta SAX e DOM.

MSXML 3.0 Microsoft msxml parser disponível emmsdn.microsoft.com/xml e suporta SAX eDOM.

Page 37: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

37

Eventos

SAX parserInvoca certos métodos quando eventos ocorrem

Programadores devem fazer overriding destes métodos para processar os dados

Page 38: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

38

Métodos invocados pelo SAX parser

Método Descrição

setDocumentLocator Invocado no início do parsing.startDocument Invocado quando o parser encontra o início

de um documento XMLendDocument Invocado quando o parser encontra o fim de

um documento XMLstartElement Invocado quando a tag de inicio de um elemento é encontradaendElement Invocado quando a tag de fim de um elemento é encontrada.characters Invocado quando text characters são encontrados.ignorableWhitespace Invocado quando whitespace que pode ser ignorado é

encontrado.processingInstruction Invocado quando um PI é encontrada.

Page 39: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

39

Como SAX funciona?Dado o documento XML abaixo:

<?xml version="1.0"?><samples><server>UNIX</server><monitor>color</monitor></samples>

SAX gera os seguintes EVENTOS:Start documentStart element (samples)Characters (white space)Start element (server)Characters (UNIX)End element (server)Characters (white space)Start element (monitor)Characters (color)End element (monitor)Characters (white space)End element (samples)

Page 40: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

40

Como SAX funciona?Processamento em SAX envolve os seguintes passos

1. Criar um event handler2. Criar o SAX parser3. Associar o event handler ao parser criado4. Fazer o parsing do documento, enviando cada evento aoevent handler.

Page 41: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

41

Exemplo: Uma pesquisa de opinião

<?xml version="1.0"?><surveys><response username="bob"><question subject="appearance">A</question><question subject="communication">B</question><question subject="ship">A</question><question subject="inside">D</question><question subject="implant">B</question></response><response username="sue"><question subject="appearance">C</question><question subject="communication">A</question><question subject="ship">A</question><question subject="inside">D</question><question subject="implant">A</question></response><response username="carol"><question subject="appearance">A</question><question subject="communication">C</question><question subject="ship">A</question><question subject="inside">D</question><question subject="implant">C</question></response></surveys>

Page 42: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

42

Criando um event handlerimport org.xml.sax.helpers.DefaultHandler;public class SurveyReader extends DefaultHandler{

public SurveyReader() {System.out.println("Object Created.");

}public void showEvent(String name) {

System.out.println("Hello, "+name+"!");}public static void main (String args[]) { SurveyReader reader = new SurveyReader(); reader.showEvent(”Nick");}

}

Page 43: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

43

Criando o SAX parser

// Exemplo usando JAXPimport org.xml.sax.helpers.DefaultHandler;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.XMLReader;public class SurveyReader extends DefaultHandler{

public SurveyReader() {}public static void main (String args[]) { XMLReader xmlReader = null; try { SAXParserFactory spfactory =

SAXParserFactory.newInstance(); SAXParser saxParser = spfactory.newSAXParser();

xmlReader = saxParser.getXMLReader(); } catch (Exception e) { System.err.println(e); System.exit(1); }}

}

Page 44: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

44

Associando o event handler ao parser

...xmlReader = saxParser.getXMLReader();xmlReader.setContentHandler(new SurveyReader());} catch (Exception e) {...

Page 45: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

45

Parsing os dados...import org.xml.sax.InputSource;...xmlReader = saxParser.getXMLReader();xmlReader.setContentHandler(new SurveyReader());InputSource source = new InputSource("surveys.xml");xmlReader.parse(source);} catch (Exception e) {...

Pronto! Falta apenas definir os eventos ...

Page 46: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

46

Criando um ErrorHandler...import org.xml.sax.SAXParseException;public class SurveyReaderextends DefaultHandler{ public SurveyReader() { } public void error (SAXParseException e) { System.out.println("Error parsing the file: "+e.getMessage()); } public void warning (SAXParseException e) { System.out.println("Problem parsing the file: "+e.getMessage()); } public void fatalError (SAXParseException e) { System.out.println("Error parsing the file: "+e.getMessage()); System.out.println("Cannot continue."); System.exit(1); }public static void main (String args[]) { ...

Page 47: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

47

Associando o ErrorHandler

...xmlReader.setContentHandler(new SurveyReader());xmlReader.setErrorHandler(new SurveyReader());InputSource source = new InputSource("surveys.xml");...

Page 48: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

48

Eventos: startDocument()...import org.xml.sax.SAXException;public class SurveyReaderextends DefaultHandler{...public void fatalError (SAXParseException e) {System.out.println("Error parsing " +"the file: "+e.getMessage());System.out.println("Cannot continue.");System.exit(1);}public void startDocument() throws SAXException { System.out.println("Tallying survey results...");}public static void main (String args[]) {...

Page 49: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

49

Eventos: startElement()...import org.xml.sax.Attributes;public class SurveyReader extends DefaultHandler{ ... public void startDocument() throws SAXException { System.out.println("Tallying survey results..."); } public void startElement( String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { System.out.print("Start element: "); System.out.println(localName); } public static void main (String args[]) { …}

Page 50: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

50

startElement(): pegando atributos

...public void startElement(

String namespaceURI,String localName,String qName,Attributes atts)throws SAXException {

System.out.print("Start element: "); System.out.println(localName); for (int att = 0; att < atts.getLength(); att++) { String attName = atts.getLocalName(att); System.out.println(" " + attName + ": " + atts.getValue(attName)); }}...

Page 51: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

51

Obtendo Dados: characters()

…// ch inclui o documento inteiropublic void characters(char[] ch,

int start,int length)throws SAXException {

if (thisElement == "question") {printIndent(4);System.out.print(thisQuestion + ": ");System.out.println(new String(ch, start, length));

}}...

Page 52: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

52

Obtendo Dados: characters()

Page 53: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

53

Obtendo Dados: characters() (completo)

...public void printIndent(int indentSize) { for (int s = 0; s < indentSize; s++) { System.out.print(" ");}} String thisQuestion = ""; String thisElement = ""; public void startElement( String namespaceURI,

String localName,String qName,Attributes atts)throws SAXException {

if (localName == "response") { System.out.println("User: " + atts.getValue("username")); } else if (localName == "question") { thisQuestion = atts.getValue("subject"); } thisElement = localName; }

public void endElement( String namespaceURI,

String localName,String qName)throws SAXException {

thisQuestion = ""; thisElement = "";}public void characters(char[] ch,

int start,int length)throws SAXException {

if (thisElement == "question") { printIndent(4); System.out.print(thisQuestion + ": "); System.out.println(new String(ch, start, length)); }}...

Page 54: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

54

SAX versus DOM

DOMModelo baseado em árvorearmazena o documento inteiro numa hierarquia de document nodesDados são acessados rapidamenteProvê facilidades para adicionar e remover nodes

SAXInvoca métodos quando markup (tag) é encontradaMaior performance do que DOMMenos overhead de memória do que DOMTipicamente usado para ler documentos (não para modificá-los)

Page 55: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

55

JDOM – Java DOM http://www.jdom.org Interface OO específica para Java

baseada em DOM Vantagens:

As mesmas de DOM Interface OO muito mais rica que DOM

Desvantagens Mesmas do DOM Limitado à Java

Page 57: 1 XML API: DOM e SAX Prof. Dr. Cláudio Baptista baptista@dsc.ufcg.edu.br

57

XSL - eXtensible Stylesheet Language