Você está na página 1de 16

XML: uma introduo prtica

<xml:sax.dom />
Helder da Rocha
www.argonavis.com.br

Programao com XML


H duas APIs padro para manipular (interpretar, gerar,

extrair dados e tratar eventos) arquivos XML:


Document Object Model (DOM)
Simple API for XML (SAX)

As duas APIs servem a finalidades diferentes.


SAX mais simples. Oferece mtodos que respondem a

eventos produzidos durante a leitura do documento


Notifica quando um elemento abre, quando fecha, etc.

DOM vai alm e monta uma estrutura hierrquica de

objetos, em forma de rvore, que permite a navegao na


estrutura do documento
Propriedades dos objetos podem ser manipuladas

SAX ou DOM?
SAX
Gasta menos memria
Mais simples menos recursos disponveis
Ideal para aplicaes simples que no precisam manipular
com toda a rvore de objetos
DOM
Em grandes documentos e hierarquias profundas exige
mais recursos
Fornece funes que permitem ter muito controle sobre
os dados
a nica opo para manipulao no cliente
APIs disponveis em vrias linguagens
Java, VB, C, JavaScript (apenas DOM)
3

DOM
Document Object Model
Objetivo: oferecer uma interface de programao

uniforme, independente de plataforma e linguagem,


para aplicaes que manipulam XML
OMG IDL

Serve para
criar um novo documento XML
navegar na rvore XML
modificar, remover ou adicionar ns (elementos,
atributos, texto, comentrios, PIs, etc.)

SAX
Simple API for XML
Baseada em eventos
Dispara eventos durante processamento do

documento

eventos podem ser capturados por ouvintes cadastrados


aes podem ser tomadas em cada situao

Exemplos de eventos
inicio e fim do documento
incio e fim do elemento (pode-se descobrir qual)
n de caractere
n de comentrio
...

SAX vs. DOM


No so concorrentes
DOM ideal para manipular a rvore XML
recursivamente
SAX ideal para ler o documento seqencialmente
DOM requer carga de todo o documento: consome mais
memria
SAX no "lembra" de tarefas realizadas: no serve para
validar referncias cruzadas
Nos processadores Crimson e Xerces, SAX usada

para montar a rvore DOM

SAX: operaes
Se um processador SAX receber o documento ...
<carta>
<mensagem id="1">Bom dia!</mensagem>
</carta>

... ele ir disparar a seguinte seqncia de eventos:


startDocument()
startElement("carta", [])
startElement("mensagem", [Attribute("id","1")])
characters("Bom dia!")
endElement("mensagem")
endElement("carta")
endDocument()

Programador deve implementar um objeto "ouvinte" para

capturar os eventos e extrair as informaes desejadas


7

SAX: exemplo em Java (trecho)


public void characters(char[] ch, int start, int length) {
for (int i = start; i < length; i++) {
System.out.println(ch[i]);
}
}
public void startElement(String uri, String localName,
String qName, Attributes att) {
System.out.print("<" + qName);
for (int i = 0; i < att.getLength(); i++) {
System.out.print(" " + att.getQName(i) + "='"
+ att.getValue(i) + "'");
}
System.out.println(">");
}
public void endElement(String uri, String localName,
String qName) {
System.out.println("</" + qName + ">");
}

DOM: operaes
Leitura
Passo 1: carregar o documento e identificar os tokens
Passo 2: identificar elementos e outros ns (pode usar SAX)
Passo 3: montar a rvore (pode ser feito durante o passo 2)
Alterao
Localiza o n de referncia
Remove, altera, muda posio, cria n antes ou depois.
Criao
Cria raiz; cria elemento raiz; cria elementos filho e
atributos; cria ns de texto
Monta rvore: coloca atributos em elementos, coloca ns
de texto em elementos, coloca elementos filho em
elementos pai, coloca elemento raiz na raiz
9

DOM: tipos de dados


Colees: NodeList, NamedNodeMap
Raiz da hierarquia de ns: Node. Subclasses:
Attr
(atributo)
CharacterData
(classe abstrata)
Text
(n de texto)
CDATASection
(seo CDATA)
Comment
(comentrio)
Document
(documento inteiro)
DocumentFragment
(sub-rvore)
DocumentType
<!DOCTYPE>
Element
(elemento)
Entity
(valor da entidade - contedo)
EntityReference
(nome da varivel)
Notation
(valor de uma notao)
ProcessingInstruction (instruo de processamento)

10

DOM: Hierarquia
DocumentFragment
Document

Text

CDATASection

CharacterData
Attr

Comment

Element
Node
DocumentType

NodeList

Notation

NamedNodeMap

Entity
EntityReference
ProcessingInstruction
11

DOM: navegao
DOM usa constantes para identificar tipos de n

(nodeType)
Constante (opcional)

Tipo

valor

ELEMENT_NODE
Element
ATTRIBUTE_NODE
Attr
TEXT_NODE
Text
CDATA_SECTION_NODE
CDATASection
ENTITY_REFERENCE_NODE
EntityReference
ENTITY_NODE
Entity
PROCESSING_INSTRUCTION_NODE ProcessingInstruction
COMMENT_NODE
Comment
DOCUMENT_NODE
Document
DOCUMENT_TYPE_NODE
DocumentType
DOCUMENT_FRAGMENT_NODE
DocumentFragment
NOTATION_NODE
Notation

1
2
3
4
5
6
7
8
9
10
11
12

12

Para usar DOM


preciso obter uma instncia do documento (forma de

fazer isto depende de processador)

Internet Explorer Netscape


Xerces JAXP JDOM IBM Parser MSXML

IE (data island): <xml id="xdoc"></xml>

Cdigo pode manipular referncia xdoc e obter raiz


xdoc.async = false; // desabilita threads
xdoc.load("arquivo.xml");
document = xdoc; // Este o elemento raiz

ou

var xdoc = new ActiveXObject("Microsoft.XMLDOM");


xdoc.load("arquivo.xml")

Java JAXP
Criar uma instncia a patir de DocumentBuilderFactory

13

Ilhas de dados XML (s MSXML)


Elemento HTML (Internet Explorer) que possibilita a

integrao HTML-XML

Permite embutir em uma pgina HTML (gerada ou no

dinamicamente) um arquivo XML


Arquivo pode ainda ser transformado por XSLT no momento da
incluso e receber formatao CSS

Sintaxe:
<xml id="identificador">
... cdigo XML ..
</xml>

O identificador necessrio para possibilitar a

manipulao dos dados na pgina


O arquivo tambm pode ser importado

<xml id="identificador" href="arquivo.xml"></xml>


14

Ilhas de dados (exemplo) (1)


Pode-se inserir XML em HTML da seguinte forma
<xml id="note">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this
weekend!</body>
</note>
</xml>

Ou importando de um arquivo externo


<xml id="note" src="note.xml"> </xml>

Fonte: www.xml101.com

15

Ilhas de dados (2) - s MSXML


Dados em XML podem ser vinculados a valores em

tabelas, por exemplo, ou manipulados via


JavaScript/VBScript
<?xml version="1.0" ?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
</CD>
</CATALOG>

<html>
<body>
<xml id="cdcat"
src="cd_catalog.xml"></xml>
<table border="1"
datasrc="#cdcat">
<tr>
<td><span datafld="ARTIST"></span></td>
<td><span datafld="TITLE"></span></td>
</tr>
</table>
</body>
</html>
Fonte: www.xml101.com

cd_catalog.xml

16