Prof. Júlio Machado

Propaganda
XML
Prof. Júlio Machado
[email protected]
PROCESSAMENTO
Análise Sintática
• Para ler e analisar o conteúdo de um
documento XML, utiliza-se um analisador
sintático para XML
– Analisadores sintáticos (ou parsers) são programas
que lêem um documento, verificam se está
sintaticamente correto e realizam alguma ação à
medida que processam o documento
Análise Sintática
• Há dois tipos de analisadores sintáticos muito
utilizados com XML:
– Streaming
• SAX – “Simple API to XML”
• StAX – “Streaming API for XML”
– Árvore
• DOM – “Document Object Model”
Análise Sintática
• Streaming
– O documento XML é lido por um parser, que
identifica cada elemento no momento em que é
encontrado, fazendo uma chamada para um
método especificado pelo programador enquanto
o documento é lido
• Dispara um evento
– São mais eficientes para tratar grandes
documentos
Análise Sintática
• Árvore
– O documento XML é armazenado na memória
num formato de árvore de nodos, todos
descendendo de uma raiz
– O programador pode então aplicar vários métodos
para localizar e manipular os nodos
– São mais fáceis de utilizar pois fornecem uma
visão completa dos dados
Análise Sintática
• Sun fornece a especificação JAXP em Java
– “Java API for XML Processing”
– Disponível a partir do Java 1.4
– Diferentes modelos de processamento
– Pacotes:
•
•
•
•
•
javax.xml.parsers
org.w3c.dom
org.xml.sax
javax.xml.transform
javax.xml.stream
Trabalhando com o DOM
• DOM modela uma fonte XML
na memória como uma árvore
de nós
• Podemos usar DOM para:
– Navegar
– Buscar
– Modificar o conteúdo
DocumentNode
ElementNode <City>
ElementNode
<Name>
lcid=“en-US”
<city>
<name lcid=“en-US”>
Seattle
</name>
</city>
AttributeNode
TextCharacterData
Seattle
Trabalhando com o DOM
• Para ler um documento XML:
– Obter um objeto factory via
DocumentBuilderFactory
– Obter um objeto DocumentBuilder
• Capacidade de ler arquivos, URL ou fluxos
– Ler o documento via método parse obtendo um
objeto Document
Trabalhando com o DOM
Trabalhando com o DOM
• Exemplo:
DocumentBuilder builder;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
String location = "http://myserver/mycontent.xml";
try {
builder = factory.newDocumentBuilder();
Document document = builder.parse(location);
} catch (SAXException se) {
// tratar erro
} catch (IOException ioe) {
// tratar erro
} catch (ParserConfigurationException pce) {
// tratar errro
}
Trabalhando com o DOM
• Para processar a árvore DOM:
– A árvore é composta de objetos Node
• Principais tipos são Element e Text
– Obter primeiro o elemento raiz via método
getDocumentElement
– Utilizar um objeto NodeList para visitar os nodos filhos
de um elemento
• Obter via método getChildNodes de Element
• Método getLength retorna o tamanho da lista
• Método item retorna o elemento armazenado em uma
determinada posição
Trabalhando com o DOM
• Exemplo:
Element root = document.getDocumentElement();
NodeList nodes = root.getChildNodes();
for (int i=0; i<nodes.getLength(); i++) {
Node childNode = nodes.item(i);
...
}
Trabalhando com o DOM
• Para processar a árvore DOM (cont.):
– Para obter um nome de um elemento utilize o método
getTagName
– Para ler o texto de um elemento utilize o método
getFirstChild para obter um elemento Text e depois
utilize o método getData para obter o texto
– Para obter a lista de atributos utilize um objeto
NamedNodeMap retornado pelo método
getAttributes
• Método item retorna retorna um objeto Node
representando o atributo
• Método getNodeName retorna o nome do atributo
• Método getNodeValue retorna o valor do atributo
Trabalhando com o DOM
• Para criar uma árvore DOM:
– Obter um objeto factory via
DocumentBuilderFactory
– Obter um objeto DocumentBuilder
– Obter um objeto Document via método
newDocument
Trabalhando com o DOM
• Exemplo:
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder =
factory.newDocumentBuilder();
Document document = builder.newDocument();
Trabalhando com o DOM
• Para criar uma árvore DOM (cont.):
– Objeto Document possui métodos para criar
nodos de elementos e texto
• Método createElement cria um novo elemento
• Método createTextNode cria um novo texto
– Para adicionar um elemento na árvore utilize o
método appendChild
– Para adicionar um atributo a um elemento utilize
o método setAttribute
Trabalhando com o DOM
• Exemplo:
Element product = document.createElement("product");
Element description = document.createElement("description");
Text descriptionText = document.createTextNode("Borracha");
Element price = document.createElement("price");
Text priceText = document.createTextNode("1.99");
price.setAttribute("currency","BRL");
product.appendChild(description);
description.appendChild(descriptionText);
product.appendChild(price);
price.appendChild(priceDescription);
Trabalhando com o DOM
• Para gerar XML a partir do DOM:
– Obter um objeto DOMImplementation via método
getImplementation de Document
– Obter um objeto DOMImplementationLS capaz de
gerar um objeto de escrita XML via método
getFeatures
– Obter um um objeto LSSerializer capaz de
serializar o DOM em XML via método
createLSSerializer
– Escrever a saída XML via métodos write
Trabalhando com o DOM
• Exemplo:
Document doc = …
DOMImplementation impl =
doc.getImplementation();
DOMImplementationLS implLS
= (DOMImplementationLS)
impl.getFeature("LS", "3.0");
LSSerializer ser = implLS.createLSSerializer();
String out = ser.writeToString(doc);
JavaBeans - Persistência
• A arquitetura dos JavaBeans permite
armazenamento e recuperação do estado de
um objeto em XML
• Classe deve implementar uma das interfaces
– java.io.Serializable (serialização automática)
– java.io.Externalizable (serialização customizada)
JavaBeans - Persistência
• Serialização automática
– Classe deve possuir um construtor vazio
– Campos static ou transient não são serializados
– Propriedades públicas serão serializadas em XML
JavaBeans - Persistência
• Persistência em XML
– Persistência de longo termo se refere à
persistência em arquivos XML
• Ao contrário da serialização binária, que é muito
dependente de versão
– Java fornece objetos
• XMLEncoder – escreve objetos em XML
• XMLDecoder – recupera objeto do XML
JavaBeans - Persistência
• XMLEncoder:
XMLEncoder encoder = new XMLEncoder(new
BufferedOutputStream(new
FileOutputStream("dados.xml")));
encoder.writeObject(objeto);
encoder.close();
JavaBeans - Persistência
• XMLDecoder:
XMLDecoder decoder = new XMLDecoder(new
BufferedInputStream(new
FileInputStream("dados.xml")));
MinhaClasse obj = (MinhaClasse)decoder.readObject();
decoder.close();
Recursos
• XML Portal W3C
– http://www.w3.org/standards/xml/
• XML Padrão 1.0
– http://www.w3.org/TR/2008/REC-xml-20081126/
• XML Padrão 1.1
– http://www.w3.org/TR/2006/REC-xml1120060816
Recursos
• XML Schema Definition
– http://www.w3.org/TR/2004/REC-xmlschema-020041028/
– http://www.w3.org/TR/2004/REC-xmlschema-120041028/
– http://www.w3.org/TR/2004/REC-xmlschema-220041028/
• Document Type Definition
– http://www.w3.org/TR/2008/REC-xml20081126/#dt-doctype
Recursos
• Java API for XML Processing
– http://download.oracle.com/javase/tutorial/jaxp/i
ndex.html
• The Java Tutorial
– http://download.oracle.com/javase/tutorial/index
.html
• Java SE 6 API
– http://download.oracle.com/javase/6/docs/api
Recursos
• Ferramentas
– http://www.ibm.com/developerworks/library/xxmltools/index.html
Download