manipula ção de xml manipulação de xml jaxp...
TRANSCRIPT
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
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
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.
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
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.
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.
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>
Capítulo 1 – Conceitos Básicos8
Desenvolvimento para Web – XML Prof. André Figueiredo
4 – JAXP DOM
DOM: ExemploDOM: Exemplo
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() + " ");
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=>
Capítulo 1 – Conceitos Básicos11
Desenvolvimento para Web – XML Prof. André Figueiredo
4 – JAXP DOM
DOM: InterfacesDOM: Interfaces
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.)
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.
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.
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
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.
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()
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.
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:
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();
}
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());}
}
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));}
}}
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.
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.
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.
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.
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"));
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.
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);
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());
}});
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)".
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