Manipula ção de XML Manipulação de XML JAXP...

32
UNIPÊ – Centro Universitário de João Pessoa 1 4 – JAXP DOM Manipulação de XML JAXP - DOM Manipula Manipula ç ç ão de XML ão de XML JAXP JAXP - - DOM DOM Prof. Prof. Eduardo Ribas Eduardo Ribas [email protected] Desenvolvimento para Web - XML Desenvolvimento para Web - XML

Transcript of Manipula ção de XML Manipulação de XML JAXP...

Page 1: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

UNIPÊ – Centro Universitário de João Pessoa

1 4 – JAXP DOM

Manipulação de XML

JAXP - DOM

ManipulaManipulaçção de XML ão de XML

JAXP JAXP -- DOMDOM

Prof. Prof. Eduardo RibasEduardo [email protected]

Desenvolvimento para Web - XMLDesenvolvimento para Web - XML

Page 2: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos2

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

O que é DOM?O que é DOM?

� API padrão para processamento de dados XML;

� Baseado em um modelo de árvore:

� o parser constrói na memória uma estrutura de objetos representando a árvore XML (objetos DOM).

� Padrão desenvolvido pela W3C;

� Define um conjunto de interfaces para a construção e tratamento de instâncias de documentos.

Document Object Model

Page 3: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos3

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

O que é DOM?O que é DOM?

� DOM foi projetado orientado a objetos:

� Uso de linguagens com suporte a programação OO (e.g. Java ou C++).

� O padrão e composto por um conjunto de interfaces;

� Java: org.w3c.dom

� Cada parser particular implementa estas interfaces;

� O desenvolvedor de aplicações usa apenas as interfaces.

Page 4: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos4

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

JAXPJAXP

� http://java.sun.com/webservices/jaxp/index.jsp

� É uma API padrão da SUN para a manipulação de dados em XML com Java;

� Implementa o modelo DOM da W3C.

Java API for XML Processing

Page 5: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos5

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

JAXP: ExemploJAXP: Exemplo

// Arquivo contendo o documento XML.

File docXMLfile = new File("arquivo.xml");

// Obtem o parser do arquivo XML e realiza a traducao.

DocumentBuilderFactory fac =

DocumentBuilderFactory.newInstance();

DocumentBuilder docBuilder = fac.newDocumentBuilder();

Document doc = docBuilder.parse(docXMLfile);

...

- Executa o parsing;- Constrói o objeto DOM na memória;- Retorna uma referência ao nodo documento.

Page 6: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos6

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: NodoDOM: Nodo

� DOM define interfaces para manipular nodos

� Nodos

� Representam elementos, texto, comentários, instruções de processamento, seções CDATA, atributos , e etc.

Page 7: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos7

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: ExemploDOM: Exemplo

<!DOCTYPE pedido SYSTEM "pedido.dtd"><pedido numero="1001">

<cliente><razao_social>JOAQUIM</razao_social><cgc>00.000.000/0001-00</cgc>

</cliente><itens_pedido>

<item><produto>caneta azul</produto><quantidade>100</quantidade><preco_unit>2</preco_unit>

</item><item>

<produto>caneta preta</produto><quantidade>200</quantidade><preco_unit>3</preco_unit>

</item></itens_pedido>

</pedido>

Page 8: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos8

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: ExemploDOM: Exemplo

Page 9: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos9

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: ExemploDOM: Exemplo

� Executando...

� Para cada nodo do documento, o seguinte código éexecutado:

java MostraConteudoDOM exemplo1.xml

System.out.print(n.getNodeName() + "=>"+ n.getNodeValue() + " ");

Page 10: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos10

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: ExemploDOM: Exemplo

pedido=>null #text=>cliente=>null #text=>

razao_social=>null #text=>JOAQUIM #text=>cgc=>null #text=>00.000.000/0001-00 #text=>

#text=>itens_pedido=>null #text=>

item=>null #text=>produto=>null #text=>caneta azul #text=>quantidade=>null #text=>100 #text=>preco_unit=>null #text=>2 #text=>

#text=>item=>null #text=>

produto=>null #text=>caneta preta #text=>quantidade=>null #text=>200 #text=>preco_unit=>null #text=>3 #text=>

#text=>#text=>

Page 11: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos11

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

Page 12: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos12

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Node

� Métodos relacionados:

� Características de um nodo (nome, tipo, valor, etc.)

� Navegação na arvore (pai, filhos, irmãos, etc.)

� Manipulação de nodos (inserir, atualizar, remover, etc.)

Page 13: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos13

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Node

� Cada nodo pode ser um (getNodeType()):

� Element

� Attribute

� Text

� Comment

� Processing Instruction

� etc.

Page 14: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos14

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Node

� Cada nodo possui um nome (getNodeName()):

� Se o nodo é do tipo elemento → é o nome do elemento;

� Se nodo é do tipo comentário → é #comment;

� Se nodo é do tipo texto → é #text;

� Se nodo e do tipo atributo → é o nome do atributo.

Page 15: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos15

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Node

� Muitos tipos de nodos não podem ter filhos, por exemplo:

� Comentário

� Instrução de Processamento

� Atributo

Page 16: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos16

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Métodos da Interface Node:

� NamedNodeMap getAttributes(): Retorna a lista de atributos do nodo (para elemento) ou null caso contrario.

� NodeList getChildNodes(): Retorna uma lista de todos os filhos do nodo.

� String getLocalName(): Retorna o nome (sem o prefixo do namespace) do nodo.

� String getNamespaceURI(): Retorna a URI do namespace do nodo, ou null se o namespace não tiver sido especificado.

� String getNodeName(): Retorna o nome do nodo, dependendo do tipo do nodo.

� short getNodeType(): Retorna um código que representa o tipo do nodo.

Page 17: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos17

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Métodos da Interface Node:

� String getNodeValue()

� Document getOwnerDocument()

� String getPrefix()

� String getTextContent()

� Boolean hasAttributes()

� Boolean hasChildNodes()

Page 18: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos18

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Métodos para navegação na Interface Node:

� Node getFirstChild(): Retorna o primeiro filho do nodo.

� Node getLastChild(): Retorna o último filho do nodo.

� Node getNextSibling(): Retorna o nodo imediatamente após o nodo atual.

� Node getPreviousSibling(): Retorna o nodo imediatamente anterior ao nodo atual.

� Node getParentNode(): Retorna o pai do nodo atual.

� NodeList getChildNodes(): Retorna os filhos do nodo atual.

Page 19: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos19

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Métodos (navegação) da Interface Node:

Page 20: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos20

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Exemplo:

� Se o nodo possui filhos, as referências ao primeiro e ao segundo filho são obtidas. A segunda referência será nula se myNode possui apenas um filho.

if (myNode.hasChildNodes()) {Node firstChild = myNode.getFirstChild();Node secondChild = firstChild.getNextSibling();

}

Page 21: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos21

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: Analisando Código...DOM: Analisando Código...

public static void main(String... args) {try {

if (args.length != 1) {System.err.println(

"Usage: java MostraConteudoDOM arquivo");System.exit(1);

}DocumentBuilderFactory b =

DocumentBuilderFactory.newInstance();DocumentBuilder builder = b.newDocumentBuilder();Document myDoc = builder.parse(args[0]);Element raiz = myDoc.getDocumentElement();

imprimeFilhos(raiz);} catch (Exception e) {

System.out.println(e.toString());}

}

Page 22: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos22

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: Analisando Código...DOM: Analisando Código...

public static void imprimeFilhos(Node n) {

System.out.print(n.getNodeName() + "=>" + n.getNodeValue() + " ");

if (n.hasChildNodes()) {NodeList nl = n.getChildNodes();for (int i = 0; i < nl.getLength(); i++) {

imprimeFilhos(nl.item(i));}

}}

Page 23: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos23

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Interfaces Utilitárias a Node:

� NodeList:

� Obtido, por exemplo, de getChildNodes();

� int getLength(): Retorna o numero de nodos na lista.

� Node item(int i): Retorna o i-ésimo item na lista.

� NamedNodeMap:

� Obtido, por exemplo, de getAttributes();

� int getLength(): Retorna o número de nodos no “mapa”.

� Node getNamedItem(String name): Recupera um nodo especificado por um nome.

Page 24: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos24

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Métodos para manipulação na Interface Node:

� Existem métodos para realizar diferentes operações com nodos, tais como:

� Remover;

� Adicionar;

� Substituir;

� Clonar nodos.

Page 25: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos25

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� E a criação dos objetos Node????

� Node, Element e etc. são interfaes!

� Objeto Document é responsável por todas as criações.

� Element createElement(String name);

� Attribute createAttribute(String name);

� Comment createComment(String contents);

� etc.

Page 26: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos26

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: InterfacesDOM: Interfaces

� Métodos para manipulação na Interface Node:

� Node appendChild(Node newChild): Adiciona um nodo no final da lista de filhos do nodo atual.

� Node cloneNode(boolean deep): Retorna uma copia do nodo. O parâmetro indica se os descendentes devem ou não serem clonados também.

� Node insertBefore(Node newChild, Node refChild): Insere um nodo antes do nodo refChild.

� Node removeChild(Node oldChild): Remove um nodo.

� Node replaceChild(Node newChild, Node oldChild): Substitui o nodo oldChild por newChild, e retorna uma referencia para oldChild.

Page 27: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos27

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: ExemploDOM: Exemplo

Node theParent = ...;

Node addedNode = theParent.appendChild(myDoc.createElement("primeiroNo"));

theParent.removeChild(addedNode);

theParent.appendChild(addedNode);

Node otherNode = theParent.insertBefore(myDoc.createElement("segundoNo"), addedNode);

theParent.appendChild(myDoc.createElement("terceiroNo"));

Page 28: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos28

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: ExercícioDOM: Exercício

� Altere a classe de MostraConteudoDOM.java de forma que altere o arquivo pedido.xml da seguinte forma:

� Insira um atributo novo de nome “RG” e valor “000000-0” no elemento “cliente”;

� Insira mais um item ao elemento “itens_pedido”;

� Remova o primeiro item de “itens_pedido”;

� Imprima árvore DOM antes e depois do trecho com as alterações.

Page 29: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos29

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: ValidaçãoDOM: Validação

� Para fazer o parser com validação (DTD), duas coisas devem ser feitas:

� Configurar a validação:

� Construir um handler para os erros.

DocumentBuilderFactory b =DocumentBuilderFactory.newInstance();

b.setValidating(true);

Page 30: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos30

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: ValidaçãoDOM: Validação

DocumentBuilderFactory b = DocumentBuilderFactory.newInstance();

b.setValidating(true);DocumentBuilder builder = b.newDocumentBuilder();builder.setErrorHandler(new ErrorHandler() {

public void error(SAXParseException exception)throws SAXException {

System.out.println("Error: " + exception.getMessage());}public void fatalError(SAXParseException exception)

throws SAXException {System.out.println("Fatal Error: " + exception.getMessage());

}public void warning(SAXParseException exception)

throws SAXException {System.out.println("Warning: " + exception.getMessage());

}});

Page 31: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos31

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: ExemploDOM: Exemplo

� Executando...

� Antes de imprimir o conteúdo a seguinte mensagem de erro aparecerá:

� Altere o arquivo acrescentando outros erros em relação a seu DTD.

� Por exemplo, troque “cliente” por “client”.

java MostraConteudoValidatingDOM exemplo1.xml

Error: The content of element type "cliente" isincomplete, it must match "(razao_social,cgc,endereco)".

Page 32: Manipula ção de XML Manipulação de XML JAXP -DOMcin.ufpe.br/~erp/DesenvWeb/aulas/xml/jaxp_DOM.pdf · 4 –JAXP DOM O que éDOM? API padrão para processamento de dados XML; Baseado

Capítulo 1 – Conceitos Básicos32

Desenvolvimento para Web – XML Prof. André Figueiredo

4 – JAXP DOM

DOM: ExercícioDOM: Exercício

� Baseado em MostraConteudoDOM.java, construa uma classe que processe o arquivo pedido.xml e imprima uma nota fiscal como a seguinte:

ABC ABC 00.000.000/000100.000.000/0001--0000Rua das Flores, 75 Porto Alegre RSRua das Flores, 75 Porto Alegre RS------------------------------------------------------------------------------------------------------------ProdutoProduto QuantQuant P.Unit.P.Unit. P.TotalP.Total------------------------------------------------------------------------------------------------------------caneta azul 100 2 200caneta azul 100 2 200papel 100 8 800papel 100 8 800------------------------------------------------------------------------------------------------------------

TOTAL: 1000TOTAL: 1000