Guia de Consulta Rápida Java e XML - Martins Fontes · Guia de Consulta Rápida Java e XML...
Transcript of Guia de Consulta Rápida Java e XML - Martins Fontes · Guia de Consulta Rápida Java e XML...
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: [email protected]: 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);