Manipulação de XML JAXP - DOM



Documentos relacionados
DOM Document Object Model

Sistemas de Informação: XML- Java

XML: uma introdução prática X100. Helder da Rocha

Introdução a Java. Hélder Nunes

Processamento de dados XML

Prática em Laboratório N.02 Criando um serviço Web via NetBeans

XML APIs. Aplicações Baseadas em XML

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Aula 04 Operadores e Entrada de Dados. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Desenvolvimento OO com Java Orientação a objetos básica

Programação por Objectos. Java

Exercícios de Revisão Java Básico

XML e Banco de Dados de Internet. Tópicos Especiais em Tecnologia da Informação Profa. Késsia R. C. Marchi

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Processamento de dados XML

Guia de Fatores de Qualidade de OO e Java

Sistemas Distribuídos

insfcanceof new public switch transient while byte continue extends for int null

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Prototype, um Design Patterns de Criação

Java e XML Processamento de documentos XML com Java

Java. Marcio de Carvalho Victorino

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Como construir um compilador utilizando ferramentas Java

Orientação a Objetos

Aplicações, durante a execução, podem incorrer em muitas espécies de erros de vários graus de severidade Quando métodos são invocados sobre um objeto:

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Java Básico. Matrícula de Alunos. Marco Antonio, Arquiteto de Software TJDF Novembro/2005

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Unidade IV: Ponteiros, Referências e Arrays

DOM (Document Object Model)

Invocação de Métodos Remotos

J820. Testes de interface Web com. HttpUnit. argonavis.com.br. Helder da Rocha

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Professor: Douglas Sousa Cursos de Computação

Prof. Esp. Adriano Carvalho

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

UNIVERSIDADE FEDERAL DO PARANÁ

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Um pouco do Java. Prof. Eduardo

Persistência de Classes em Tabelas de Banco de Dados

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

O que é uma Exceção? Call Stack. Java Tratamento de Exceção. de métodos que foram usados até chegar na presente instrução.

FBV - Linguagem de Programação II. Um pouco sobre Java

Projeto de Software Orientado a Objeto

Manual do Desenvolvedor Criptografia de Arquivos do WebTA

Orientação a Objetos com Java

1.6. Tratamento de Exceções

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos.

Técnicas de Programação II

Padrão Arquitetura em Camadas

THREADS EM JAVA. George Gomes Cabral

BC0501 Linguagens de Programação

Algoritmos e Programação II. Sobrecarga

Universidade Federal de Juiz de Fora Ciência da Computação Sistemas Distribuídos Professor Ciro Barbosa

Trabalho Prático Nº1 Introdução ao C#.NET

CURSO DE PROGRAMAÇÃO EM JAVA

Manipulação de Banco de Dados com Java 1. Objetivos

PROGRAMANDO EM C# ORIENTADO A OBJETOS

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

WebWork 2. João Carlos Pinheiro.

Programação Orientada a Objetos em java. Polimorfismo

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

JDBC Tópicos avançados de acesso a base de dados relacional

3 Classes e instanciação de objectos (em Java)

Banco de Dados. Banco de Dados. Alcides Pamplona Alcides Pamplona Linguagem de Programação CESBD 2010

UNIVERSIDADE FEDERAL DO PARANÁ

Noções sobre Objetos e Classes

Programação de Computadores - I. Profª Beatriz Profº Israel

XML e Banco de Dados. Prof. Daniela Barreiro Claro DCC/IM/UFBA

Framework.NET, Microsoft Visual C# 2010 Express e Elementos da Linguagem C#

Roteiro 1: Dados, variáveis, operadores e precedência

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

Herança. Alberto Costa Neto DComp - UFS

Curso de Aprendizado Industrial Desenvolvedor WEB

Bruno Ribeiro de F. Machado DESENVOLVIMENTO DE UMA FERRAMENTA PARA DOCUMENTAÇÃO DE CÓDIGOS-FONTE BASEADA EM XML

Templates e Pilhas. 1. Introdução

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Criar a classe Aula.java com o seguinte código: Compilar e Executar

Java 2 Standard Edition Como criar classes e objetos

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

Documentação Usando o Javadoc

Encapsulamento de Dados

Programação online em Java

5 Caso de estudo O cartão fidelidade

Sistemas Distribuídos

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

A Linguagem Java. Alberto Costa Neto DComp - UFS

Transcrição:

UNIPÊ Centro Universitário de João Pessoa Desenvolvimento para Web - XML Manipulação de XML JAXP - DOM Prof. Eduardo Ribas ducaribas@gmail.com 1 4 JAXP DOM

O que é DOM? Document Object Model 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. 2

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. 3

JAXP Java API for XML Processing 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. 4

JAXP: Exemplo // Arquivo contendo o documento XML. File docxmlfile = new File("arquivo.xml"); - Executa o parsing; - Constrói o objeto DOM na memória; // Obtem - Retorna o uma parser referência do arquivo ao nodo documento. XML e realiza a traducao. DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance(); DocumentBuilder docbuilder = fac.newdocumentbuilder(); Document doc = docbuilder.parse(docxmlfile);... 5

DOM: Nodo DOM define interfaces para manipular nodos Nodos Representam elementos, texto, comentários, instruções de processamento, seções CDATA, atributos, e etc. 6

DOM: 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> 7

DOM: Exemplo 8

DOM: Exemplo Executando... java MostraConteudoDOM exemplo1.xml Para cada nodo do documento, o seguinte código é executado: System.out.print(n.getNodeName() + "=>" + n.getnodevalue() + " "); 9

DOM: 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=> 10

DOM: Interfaces 11

DOM: 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.) 12

DOM: Interfaces Node Cada nodo pode ser um (getnodetype()): Element Attribute Text Comment Processing Instruction etc. 13

DOM: 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. 14

DOM: Interfaces Node Muitos tipos de nodos não podem ter filhos, por exemplo: Comentário Instrução de Processamento Atributo 15

DOM: 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. 16

DOM: Interfaces Métodos da Interface Node: String getnodevalue() Document getownerdocument() String getprefix() String gettextcontent() Boolean hasattributes() Boolean haschildnodes() 17

DOM: 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. 18

DOM: Interfaces Métodos (navegação) da Interface Node: 19

DOM: Interfaces Exemplo: if (mynode.haschildnodes()) { Node firstchild = mynode.getfirstchild(); Node secondchild = firstchild.getnextsibling(); } 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. 20

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()); } 21

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)); } } 22

DOM: 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. 23

DOM: 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. 24

DOM: 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. 25

DOM: 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. 26

DOM: 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")); 27

DOM: 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. 28

DOM: Validação Para fazer o parser com validação (DTD), duas coisas devem ser feitas: Configurar a validação: DocumentBuilderFactory b = DocumentBuilderFactory.newInstance(); b.setvalidating(true); Construir um handler para os erros. 29

DOM: 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()); } }); 30

DOM: Exemplo Executando... java MostraConteudoValidatingDOM exemplo1.xml Antes de imprimir o conteúdo a seguinte mensagem de erro aparecerá: Error: The content of element type "cliente" is incomplete, it must match "(razao_social,cgc,endereco)". Altere o arquivo acrescentando outros erros em relação a seu DTD. Por exemplo, troque cliente por client. 31

DOM: Exercício Baseado em MostraConteudoDOM.java, construa uma classe que processe o arquivo pedido.xml e imprima uma nota fiscal como a seguinte: ABC 00.000.000/0001-00 Rua das Flores, 75 Porto Alegre RS ------------------------------------------------------ Produto Quant P.Unit. P.Total ------------------------------------------------------ caneta azul 100 2 200 papel 100 8 800 ------------------------------------------------------ TOTAL: 1000 32