Guia de Consulta Rápida Java e XML - Martins Fontes · Guia de Consulta Rápida Java e XML...

Preview:

Citation preview

Guia de Consulta Rápida

Java e XML

Processamento de documentos XML com Java

2a edição

Renê Rodrigues Veloso

Novatec

Copyright 2007 da Novatec Editora Ltda.

Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora.

Editor: Rubens PRates

ISBN: 978-85-7522-111-2

Primeira impressão: Abril/2003 (ISBN: 85-7522-036-5)Segunda edição: Julho/2007 (ISBN: 978-85-7522-111-2)

novatec editoRa Ltda.Rua Luís Antônio dos Santos 11002460-000 São Paulo SP – BrasilTel.: +55 11 6959-6529Fax: +55 11 6950-8869E-mail: novatec@novatec.com.brSite: www.novatec.com.br

�Sumário

Introdução..............................................................................5Por.que.utilizar.Java?.........................................................5O.que.é.XML?...................................................................5

Analisando.documentos.XML.................................................7Parsers.XML.....................................................................8Processadores.XML...........................................................9Diferenças.entre.parser.e.processador.XML....................... 10Diferenças.entre.SAX.e.DOM........................................... 10

Trabalhando.com.JAXP..........................................................11As.APIs.JAXP.................................................................. 12Parser.DOM.................................................................... 13Parser.SAX...................................................................... 16Validando.com.Schema.em.JAXP.....................................22

Trabalhando.com.Xerces........................................................25Instalação.......................................................................25Parser.DOM....................................................................25Parser.SAX......................................................................26Manipulando.Namespaces...............................................26Validação.DTD...............................................................26Validação.Schema............................................................26

Tratando.erros......................................................................26A.Interface.ErrorHandler.................................................27Utilizando.o.tratador.de.erros.criado...............................28

Removendo.espaços.em.branco..............................................28Removendo.espaços.em.branco.com.JAXP.......................29Removendo.espaços.em.branco.com.Xerces......................29

API.DOM.............................................................................30Módulos.de.DOM...........................................................30Hierarquia.de.Classes/Interfaces...................................... 32Interface.Node................................................................ 33Interface.NodeList...........................................................38Interface.Element............................................................ 39Interface.NamedNodeMap.............................................. 41Interface.Attr...................................................................42Interface.Document.........................................................42Interface.CharacterData...................................................44Interface.Text...................................................................45Interface.DocumentType..................................................46Interface.Entity............................................................... 47Interface.Notation........................................................... 47Interface.ProcessingInstruction........................................ 47Interface.DOMImplementation........................................48Classe.DOMException....................................................48

Módulo.DOM.Traversal........................................................50Interface.NodeIterator......................................................51Interface.fábrica.DocumentTraversal................................ 52Interface.NodeFilter.........................................................54Interface.TreeWalker........................................................56

Gerando.documentos.XML...................................................58Criando.uma.árvore.DOM..............................................58Criando.um.objeto.Document.........................................58Criando.e.adicionando.nós-filho......................................58

� Sumário

Serialização...........................................................................60Serializando.com.JAXP....................................................60Serializando.com.Xerces..................................................64Classe.OutputFormat......................................................64

XPath.e.XSLT........................................................................68XPath.............................................................................68Funções.de.processamento.XPath.....................................73XPath.em.Java.................................................................77XSLT............................................................................... 81

Exemplos.práticos.................................................................84Trabalhando.com.DOM4J.....................................................90

Instalação.......................................................................90Parsing.XML...................................................................90Criando.um.Novo.Documento.XML................................ 91Percorrendo.o.documento.XML.......................................93Navegação.com.Xpath.....................................................93Convertendo.de.String.para.Árvore.DOM4J.....................94Principais.Interfaces.do.Pacote.org.dom4j.........................95

Serialização.de.Objetos.em.XML......................................... 100Serializando.com.XStream............................................. 100Serializando.com.XMLEncoder/XMLDecoder................ 102

Informações.adicionais.(links)............................................. 104Sobre.o.autor................................................................ 105

Índice.remissivo.................................................................. 106

�Introdução

Introdução

Por que utilizar Java?

A.frase.“escreva.um.e.rode.em.qualquer.lugar”.é.um.bom.motivo.para. começar. a. pensar. em. Java. como. sendo. a. plataforma.de. desenvolvimento. de. aplicações. poderosas,. seguras. e. que.funcionam.em.qualquer.ambiente.computacional..Java.é.uma.linguagem.popular.e.de.recursos.fantásticos;.com.ela.é.possível.fazer.quase.tudo.o.que.se.queira,.é.ideal.para.a.implementação.de.aplicativos.baseados.em.Intranet.e.Internet.e.em.qualquer.outro.software.para.dispositivos.que.se.comunicam.em.uma.rede.(como.telefones.celulares,.pagers.e.PDAs.–.Personal.Digital.Assistants),.e.possui.recursos.importantes.como.manipulação.de.strings,.imagens.gráficas,.componentes.de.interface.gráfica.com.o.usuário,.tratamento.de.exceções,.multitarefa,.multimídia.(áudio,.imagens,.animação.e.vídeo),.processamento.de.arquivos,.processamento.de.banco.de.dados,.computação.distribuída.e.estruturas.de.dados.pré-empacotadas..

Os. recursos. de. Java. são. exatamente. o. que. as. empresas. e.organizações.estão.procurando.para.atender.aos.requisitos.de.processamento.de.informações.atuais..

A. linguagem. Java. foi. desenvolvida. pela. Sun. Microsystems.e. está. disponível. gratuitamente. na. Internet. no. site. da. Sun:.http://java.sun.com.

O que é XML?

A. XML. (Extensible. Markup. Language,. ou. Linguagem. de.Marcação.Extensível,.com.extensível.significando.expansível),.é.uma.metalinguagem.de.marcação.definida.pelo.W3C.(World.Wide.Web.Consortium).em.www.w3.org,.que.lhe.permite.criar.a.sua.própria.linguagem.(baseada.em.marcações.–.tags).e.seguindo.as.regras.que.você.definir.em.um.determinado.contexto..

O.W3C.não.é.um.órgão.de.padronização.como.a.ISO,.mas.de.recomendações..Isso.significa.que.ele.indica.o.que.é.melhor,.e.não.o.que.deverá,.necessariamente,.ser.utilizado..Por.exemplo,.a.recomendação.XML.1.1.

Interoperabilidade

É.muito.comum.encontrarmos,.principalmente.em.ambientes.empresariais,.grandes.redes.de.comunicação.de.dados.interligando.aplicativos. distribuídos. entre. máquinas. com. arquiteturas. e.sistemas.operacionais.diferentes..E.para.que.isso.aconteça,.é.necessário.que.as.aplicações.sejam.capazes.de.conversar.entre.si,.ou.melhor,.é.fundamental.que.haja.interoperabilidade.entre.elas...Para.que.ocorra.interoperabilidade,.também.é.preciso.que.as.aplicações.aceitem.uma.especificação.comum.de.protocolos.e.formato.de.dados.e.que.sejam,.o.máximo.possível,.baseadas.

� Introdução

em.padrões.abertos..A.Internet.é.um.bom.exemplo.de.ambiente.facilitador.de.interoperabilidade,.e.padronização.é.uma.palavra.importante.na.grande.rede,.pois.nela.devemos.garantir.que.a.informação.transmitida.será.entendida.pelo.receptor,.como.os.diversos.browsers.e.aplicações.clientes.existentes.

Uma.das.principais.vantagens.da.XML.é.justamente.promover.a. interoperabilidade.ou.a.troca.dos.dados.de.maneira.simples,.barata.e.rápida.entre.os.diversos.tipos.de.computadores.e.sistemas..E.isso.se.dá.porque.um.arquivo.XML.é.baseado.em.formato.texto,.contribuindo.até.mesmo.para.a.leitura.e.maior.entendimento.

Organização e personalização

XML.representa.os.dados.de.maneira.hierárquica.e.organizada..Essa.representação.é.feita.por.meio.de.uma.árvore.que.trata.cada.elemento.como.sendo.um.nó,.facilitando.o.entendimento.e.a.busca.de.informações.

Uma.outra.função.de.XML.é.a.capacidade.de.separar.o.conteúdo.da.apresentação;.preocupa-se.com.“o.que.mostrar”,.enquanto.HTML.se.preocupa.em.“como.mostrar”.a.informação..Veja.a.tag.<p>,.por.exemplo;.em.HTML,.essa.tag.significa.o.início.de.um.parágrafo,.já.em.XML,.essa.mesma.tag.poderia.representar.um.preço,.um.parâmetro,.uma.pessoa.etc.,.dependendo.do.contexto.em.que.se.encontra.

Existem.várias. linguagens.de.marcação.que. foram.criadas.a.partir. de. XML. e. que. se. tornaram. recomendações. do.W3C,.como. a. MathML. (Mathematical. Markup. Language). em.www.w3.org/Math,. que. fornece. uma. maneira. padrão. de.descrever. equações,. símbolos. e. expressões. matemáticas,. e. a.CML. (Chemical. Markup. Language). em. www.xml-cml.org,.que.descreve.informações.moleculares,.gerencia.problemas.de.equações.químicas.e.ajuda.os.químicos.a.manipular.átomos.e.moléculas.como.tags.

Autodescrição dos dados

Os.dados.em.um.documento.XML.são.autodescritíveis,.já.que.as.tags.informam.o.tipo.de.informação.que.está.por.vir..Por.exemplo,.em.um.documento.XML,.como.o.mostrado.a.seguir:

livro.xml

<?xml version=”1.0” encoding=”UTF-8”?><LIVRO> <TITULO> Java e XML </TITULO> <ASSUNTO> Processamento de documentos XML com Java </ASSUNTO></LIVRO>

�Introdução

Tomando.como.base.somente.os.nomes.das.tags.ou.elementos.XML,. podemos. descobrir. de. que. se. trata. o. documento.apresentado.. Neste. caso,. o. documento. livro.xml. descreve.informações.sobre.um.livro.cujo.título.é.“Java.e.XML”.e.o.assunto.é.“Processamento.de.documentos.XML.com.Java”.

Documentos bem formados

Um.bom.documento.XML.precisa.ser.bem.formado,.ou.seja,.deve.seguir.as.regras.de.sintaxe.estabelecidas.para.a.XML.pelo.W3C.na.especificação.XML.1.1.

O.documento.XML.precisa.conter.um.ou.mais.elementos.(tags);.deve.haver.somente.um.elemento.raiz,.que.deve.conter.todos.os. demais. elementos.. Cada. elemento. deve. estar. aninhado.corretamente.dentro.de.outro.elemento..Cada.elemento.deve.ter.a.sua.tag.de.fechamento.correspondente.

Diferentemente. do. HTML. que. pode. ter. tags. abertas,.embaralhadas. e. sem. raiz,. o. documento. XML. deve. ser.sintaticamente.correto.

Documentos válidos

Um.documento.XML.é.dito.válido.se.houver.uma.definição.de.tipo.de.documento.(DTD).ou.Schema.associado.a.ele.

DTD/Schema. dita. as. regras. que. o. documento. deve. seguir,.quais.são.seus.elementos,.os.seus.nomes.e.que.tipo.de.dados.suporta..Veja.um.exemplo.de.DTD.para.o.documento.livro.xml mostrado.anteriormente:

<!ELEMENT LIVRO (TITULO, ASSUNTO)><!ELEMENT TITULO (#PCDATA)><!ELEMENT ASSUNTO (#PCDATA)>

O.arquivo.com.esse.texto.pode.ser.chamado.de.livro.dtd.

Observação

Um.documento.bem.formado.nem.sempre.é.válido,.mas.um.documento.válido.é.sempre.bem.formado.

Analisando documentos XMLPara.trabalhar.com.documentos.no.formato.XML,.de.maneira.que.se. tenha.acesso.a. todos.os.elementos.que.constituem.o.documento,.precisamos.ter.em.mãos.algumas.ferramentas.que.nos.permitirão.realizar.a.parsing.ou.análise.dos.dados..Essas.ferramentas.são.as.chamadas.APIs.(Application.Programming.Interface),.disponíveis.para.Java,.com.as.quais.construíremos.os.parsers.e.processadores.XML..

� Analisando documentos XML

Parsing

É.o.processo.de.leitura.e.divisão.do.documento.em.elementos,.atributos,.entidades,.comentários.e.outros.tipos.de.dados,.por.meio.do.qual.poderão.ser.analisados.e.validados..

Parsers XML

O.parser.é.uma.biblioteca.de.software.(uma.classe.em.Java).que.lê.o.documento.XML.e.verifica.se.ele.é.bem.formado.e.válido.

Validante e não-validante

Os. parsers. XML. são. categorizados. como. validantes. e. não-validantes:.

•. Validante:.Um.parser.validante.deve.checar.as.restrições.de.validação.e.boa.formação.do.documento.de.acordo.com.o.DTD/Schema.associado.

•. Não-validante:.Quando.lemos.um.documento.XML,.um.parser.não-validante.checa.a.sua.boa.formação.de.acordo.com.a.especificação.XML.1.1.e.informa.quaisquer.violações.ou.erros.quanto.à.estrutura.do.documento..

Java.1.4.foi.a.primeira.versão.de.Java.a.incluir.um.parser.XML..Em.outras.versões,.é.necessário.fazer.o.download.do.parser.na.web.e.instalá-lo.normalmente.como.qualquer.outra.biblioteca.Java,.bastando.adicioná-lo. ao. seu. CLASSPATH..Mesmo.em.Java.1.4.é.possível.substituir.o.parser-padrão.por.um.diferente.que.contenha.uma.característica.adicional,.mais.simples.ou.mais.rápida.em.seus.documentos.

Parsers disponíveis

Existem.vários. tipos.de.analisadores.ou.parsers.XML,. todos.com. características. e. implementações. distintas,. podendo.ser. encontrados. disponíveis. para. download. na. internet. ou.comercializados..A.seguir.serão.citados.os.mais.comuns.

Ælfred

O. Ælfred. (http://www.microstar.com/aelfred.html). é. um.pequeno.e. rápido.parser. especialmente.desenvolvido.para.o.uso.em.applets.Java..Foi.projetado.para.programadores.Java.que.querem.processar.XML.em.seus.applets.e.outras.aplicações.sem.aumentar.excessivamente.o. tamanho.do.projeto..Alfred.consiste. em. somente. duas. classes,. com. um. total. de. 26K. de.tamanho,.e.necessita.de.pouca.memória.para.executar..Suporta.a.API.SAX.

�Analisando documentos XML

Crimson

Antes. conhecido. como.“Projeto. Java. X”. (http://xml.apache.org/crimson/),.é.o.parser.que.a.Sun.empacota.com.o.JDK.1.4..Crimson.suporta.mais.ou.menos.as.mesmas.APIs.e.especificações.que.a.Xerces.–.SAX2,.DOM2,.JAXP,.XML.1.0,.Namespaces.em.XML.e.schema.

Oracle XML Parser

Encontrado.em.http://technet.oracle.com/tech/xml/..É.um.parser.que.permite.a.análise.de.documentos.XML.por.meio.das.APIs.SAX.ou.DOM,.usando.os.modos.validante.ou.não-validante.

Piccolo

Piccolo. de.Yuval. Oren. é. um. parser. pequeno,. rápido. e. não-validante..No.entanto,.faz.a.leitura.de.DTDs.externas.e.as.aplica.ao. documento. ajustanto. valores. de. atributos. e. resolvendo.referências.a.entidades.externas..Suporta.exclusivamente.a.API.SAX.. Não. possui. implementação. DOM.. Mais. informações.podem.ser.obtidas.em.http://piccolo.sourceforge.net/.

Xerces

Um. dos. melhores. e. mais. completos. parsers. disponíveis.atualmente.é.Xerces-J.do.Projeto.XML.Apache,.disponível.em.http://xerces.apache.org/..Atualmente,.na.versão.2.x,.possui.a.melhor. adaptação. à. especificação. XML.1.1.. Fornece. suporte.completo.às.APIs.SAX2.e.DOM.Level.3,.e.até.JAXP..Xerces-J.é.altamente.configurável.e.adaptável.para.quase.tudo.de.que.um.parser.necessita..Xerces-J.também.suporta.W3C.XML.Schema.Language.e.Namespaces.

XP

Encontrado.em.http://www.jclark.com/xml/xp/index.html..XP.é.um.parser.que.suporta.a.especificação.1.0.da.XML..É.capaz.de.detectar.documentos.bem.formados,.no.entanto,.atualmente,.é.um.parser.não-validante..Suporta.a.API.SAX.

Processadores XML

Basicamente.um.processador.XML.é.um.módulo.de.software.que.faz.a.leitura.de.documentos.XML.e.fornece.os.aplicativos.necessários. para. acessar. o. conteúdo. e. a. estrutura. desses.documentos..A.especificação.XML.1.0.do.W3C.(http://www.w3.org). define. precisamente. as. funções. de. um. processador.XML..Um.processador.XML.(Figura.1). funciona.como.uma.ponte.entre.um.documento.XML.e.uma.aplicação,.podendo,.além.de.analisar,.também.gerar.documentos.XML..A.aplicação.utiliza.uma.API.para.acessar.objetos.que.representam.parte.do.documento.XML..

10 Analisando documentos XML

Documento XML

Processador XML

Árvore DOMEventos SAX

Aplicação

AnáliseGeraçãoAcesso com DOM e SAX

Figura 1 – Processador XML.

Diferenças entre parser e processador XML

Um.parser.XML.tem.a.função.de.fazer.a.análise.do.conteúdo.de.um.documento.XML.e.verificar.se.esse.documento.é.bem.formado. e. válido.. Já. um. processador. XML,. além. de. fazer. a.parsing.ou.a.análise.dos.dados,.pode.navegar.por.entre.os.nós.da.árvore.XML,.acessar.todos.os.elementos.e.campos,.como.também. gerar. documentos. em. formato. XML. e. quaisquer.outros.formatos.

Diferenças entre SAX e DOM

O.objetivo.das.APIs.SAX.e.DOM.é.tornar.a.interpretação.XML.fácil.e.satisfatória.para.programas.de.computador..

Para.fazer.essa.interpretação,.existem.duas.técnicas.conhecidas.como.Simple.API.for.XML.(SAX).e.Document.Object.Model.(DOM),.baseadas.em.abstrações.dos.conjuntos.de.informação.de.um.documento.XML.(Figura.2)..Essas. técnicas.projetam.esses.conjuntos.e.informações.em.um.modelo.de.objetos.que.permite.aos.programadores.manipulá-los..

SAX

SAX.(Simple.API.for.XML).é.um.conjunto.de.interfaces.que.decompõe.um.documento.XML.em.uma.sucessão. linear.de.chamadas.de.métodos.

DOM

DOM.(Document.Object.Model).é.um.conjunto.de.interfaces.que.decompõe.um.documento.XML.em.uma.árvore.transversal.hierárquica.de.nós/objetos.

11Analisando documentos XML

<?xml version="1.0" encoding="UTF-8"?><livro> <nome>Java e XML</nome> <editora>Novatec</editora></livro>

PARSING

livro

nome editora

Java e XML Novatec

startElement: livrostartElement: nomecharacters: Java e XMLendElement: nomestartElement: editoracharacters: NovatecendElement: editoraendElement: livro

Figura 2 – Diferenças entre DOM e SAX, respectivamente.

Comparando DOM e SAX

•. DOM.é.uma.solução.natural.para.lidar.com.dados.que.são.mais.bem.descritos.como.uma.árvore.

•. Para.trabalhar.principalmente.com.dados.estruturados.ou.gerados.pelo.computador,.SAX.pode.ser.mais.conve-niente.

•. SAX.possui.métodos.e.estruturas.de.dados.mais.simples.do.que.os.de.DOM,.podendo.muitas.vezes.alcançar.alta.performance.

•. DOM.agiliza.a.pesquisa.por.elementos,.bastando.apenas.indicar.o.caminho.de.nós.na.árvore.(por.exemplo,.com.expressões.XPath).

•. SAX.utiliza.menos.memória.que.DOM,.pois.não.precisa.manipular.uma.estrutura.de.dados.complexa,.como.uma.árvore.em.memória.

Trabalhando com JAXPNas. versões. mais. recentes. de. J2SE. e. J2EE,. é. incluído. um.conjunto-padrão.de.APIs.para.XML,.conhecido.como.JAXP.(Java.APIs.for.XML.Processing)..

Essas.APIs.também.estão.disponíveis.separadamente,.em.um.pacote.de.bibliotecas.Java.chamado.JAX.Pack.(Java.XML.Pack),.no.site.da.Sun.(http://java.sun.com),.contendo.várias.outras.APIs.relacionadas.a.XML.e.Web.Services..

JAXP.suporta.os.analisadores-padrão.SAX.(Simple.API.for.XML.Parsing). e. DOM. (Document. Object. Model),. assim. como. o.padrão.XSLT.(XML.Stylesheet.Language.Transformation),.dando.maior.controle.sobre.a.apresentação.dos.dados.e.capacitando.a.conversão.dos.dados.para.outro.documento.XML.ou.para.outros. formatos,.como.HTML..JAXP.também.trabalha.com.DTD/Schema.e.suporta.namespaces.

12 Trabalhando com JAXP

As APIs JAXP

As.principais.APIs.JAXP.são.definidas.no.pacote.javax.xml.parsers..Esse.pacote.contém.duas. fábricas.de.classes:.SAXParserFactory.e. DocumentBuilderFactory,. que. fornecem. instâncias. para. um.objeto. SAXParser. e.um.objeto. DocumentBuilder,. respectivamente..A.vantagem.é.que.essas.fábricas.de.classes,.SAXParserFactory.e.DocumentBuilderFactory,. permitem. utilizar. uma. implementação.XML.oferecida.por.outros.fornecedores.sem.a.necessidade.de.mudar.o.código.

Uma visão geral dos pacotes

As.APIs.SAX.e.DOM.são.definidas.pelo.grupo.XML-DEV.e.pelo.W3C,.respectivamente..As.bibliotecas.que.definem.essas.APIs.são:

Pacotes DOM

Pacote Descrição

org.w3c.dom. Define.a.interface.de.programação.DOM.para.documentos.XML.(especificação.W3C).

javax.xml.parsers. Define.a.classe-fábrica.DocumentBuilderFactory.e.a.classe.DocumentBuilder,.que.constroem.um.objeto.implementando.a.interface.Document.do. W3C.. A. fábrica. utilizada. para. criar. o.construtor.é.determinada.pelas.propriedades.do. pacote. javax.xml.parsers,. que. podem.ser.ajustadas.por.um.comando.de.linha.ou.ativadas. quando. se. invocar. o. método. new Instance..Esse.pacote.também.define.a.classe.ParserConfigurationException. para. informar.erros.

Pacotes SAX

Pacote Descrição

org.xml.sax. Define.as.interfaces.SAX..O.nome.org.xml.é.o.prefixo.do.pacote.que.foi.estabelecido.pelo.grupo.que.definiu.a.API.SAX.

org.xml.sax.ext. Define.as.extensões.SAX.que.são.utilizadas.em.um.processamento.SAX.mais.sofisticado,.por.exemplo,.para.processar.um.DTD.ou.para.ver.a.sintaxe.detalhada.de.um.arquivo.

org.xml.sax.helpers.Contém.classes.auxiliares.que.facilitam.a.utilização.de.SAX.

Javax.xml.parsers. Define.a.classe.SAXParserFactory.que.retorna.o.SAXParser..Também.define.classes.de.exceções.para.informar.erros.

1�Trabalhando com JAXP

Pacotes XSLT

Pacote Descrição

javax.xml.transform. Define. as. classes. TransformerFactory.e. Transformer,. que. são. utilizadas.para.obter.um.objeto.capaz.de.fazer.transformações. em. um. documento.XML.seguindo.as.regras.contidas.em.uma.folha.de.estilo..Depois.de.criar.um. objeto. transformer,. é. invocado.o. método. transform(),. fornecendo.uma. entrada. (source). e. uma. saída.(output).

javax.xml.transform.dom. Classes.para.criar.objetos.de.entrada.(input).e.saída.(result).de.um.DOM.

javax.xml.transform.sax. Classes.para.criar.a.entrada.(input).de.um.parser.SAX.e.objetos.de.saída.(output).de.um.manipulador.de.even-tos.SAX.

javax.xml.transform.stream.Classes.para.criar.objetos.de.entrada.(input).e.saída.(output).de.uma.stream.de.I/O.

Parser DOM

O. Document. Object. Model. (DOM). é. uma. interface. de.programação. especificada. pelo. W3C. para. o. tratamento. e.manipulação.de.dados.em.documentos.XML..DOM.sugere.um.meio.de.abordar.documentos.XML.como.sendo.uma.árvore.de.nós,.e.essa.é.a.maneira.mais.correta,.visto.que.o.documento.XML. organiza-se. também. em. forma. de. árvore.. A. Figura. 3.apresenta.o.processo.de.construção.e.funcionamento.de.um.parser.DOM.JAXP..Para.mais.informações.sobre.DOM,.visite.o.site.www.w3.org.

DocumentBuilderFactory

DocumentBuilder

ObjetoDocument

Árvore DOM

Dados XML

Figura � – Construção e funcionamento de um parser DOM JAXP.

1� Trabalhando com JAXP

DocumentBuilder e DocumentBuilderFactory

Para.construir.um.parser.DOM.em.JAXP,.é.necessário.utilizar.as.classes.javax.xml.parsers.DocumentBuilderFactory.e.javax.xml.parsers.DocumentBuilder.e.configurá-las.corretamente.

import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.DocumentBuilder;import org.w3c.dom.Document;

String nome_arquivo;...DocumentBuilderFactory factory = DocumentBuilderFactory.

newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse(nome_arquivo);

É.necessário.seguir.alguns.passos.para.obter.um.parser.DOM.JAXP:

1.. Utilize.o.método-fábrica.estático.DocumentBuilderFactory.n e w I n s t a n c e ( ) . par a . re tor n ar . u m . o b j e to.DocumentBuilderFactory.

2.. Utilize. o. método. newDocumentBuilder(). do. objeto.DocumentBuilderFactory. para. retornar. uma. instância. da.classe.DocumentBuilder.

3.. Utilize.um.dos.cinco.métodos.parse().de.DocumentBuilder.para.ler.o.documento.XML.e.retornar.um.objeto.org.w3c.dom.Document.

4.. Lembre-se.de.colocar.tudo.em.um.bloco.try-catch.para.tratar.possíveis.exceções.

Exemplo completo

import javax.xml.parsers.*;import org.w3c.dom.Document;import java.io.*;

public class ParserExemplo { public static void main(String args[]) { String nomeArquivo = “”;

if(args.length > 0) nomeArquivo = args[0]; else { System.out.println(“Use: ParserExemplo seu_arquivo_XML”); System.exit(0); } try{ DocumentBuilderFactory factory =

DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(nomeArquivo); } catch(Exception e){e.printStackTrace();} }}

1�Trabalhando com JAXP

Métodosparse()

public Document parse(InputSource fonte) throws SAXException, IOException

public Document parse(String uri) throws SAXException, IOExceptionpublic Document parse(File arquivo) throws SAXException,

IOExceptionpublic Document parse(InputStream entrada) throws

SAXException, IOExceptionpublic Document parse(InputStream entrada,String systemID)

throws SAXException,IOException

Configurando DocumentBuilderFactory

A.classe.DocumentBuilderFactory.possui.métodos.de.ajuste.set...(),.que.permitem.determinar. exatamente.como.o.parser. criado.deve.se.comportar.

Ignorando comentários

public boolean isIgnoringComments();public void setIgnoringComments(boolean ignora);

Esses. métodos. determinam. se. o. parser. produzido. por. esse.factory.irá.gerar.nós.de.comentários.que.serão.vistos.na.entrada.do. documento.. O. valor. default,. false,. significa. que. os. nós-comentário.serão.produzidos..

Ignorando espaços em branco

public boolean isIgnoringElementContentWhitespace();public void setIgnoringElementContentWhitespace(boolean ignorarWS);

Esses.métodos.determinam.se.o.parser.irá.gerar.nós-texto.para.os.chamados.“espaços.em.branco.ignoráveis”,.isto.é,.espaço.em.branco.que.ocorre.entre.os.elementos.onde.o.DTD.especifica.que.os.caracteres.de.dados.analisados.não.podem.aparecer.

O.valor.default.(padrão).é.false,.isto.é,.inclui.nós-texto.para.espaços.em.branco.ignoráveis..Para.que.essa.propriedade.seja.aplicada,.ou.seja,.para.que.se.possa.atribuir.true.ao.argumento.ignoraWS,.o.documento.deve.ter.um.DTD.associado.a.ele.e.deve.ser.válido..De.outra.forma,.o.parser.não.pode.saber.qual.espaço.em.branco.é.ignorável.e.qual.não.é.

Reconhecendo Namespaces

public boolean isNamespaceAware();public void setNamespaceAware(boolean namespaceAware);

Esses.métodos.determinam.se.o.parser.produzido.é.names-pace aware,.ou.seja,.se.reconhece.namespaces..Essa.característica.irá.ajustar.as.propriedades.de.prefixo.e.URI.namespace.dos.nós-elemento.e.atributos.

O. valor. default. (padrão). é. false,. mas. deve. ser. ajustado.sempre.para.true..Por.exemplo:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

factory.setNamespaceAware(true);

Recommended