XML significa Extensible Markup Language.
A seguir estão as vantagens que o XML oferece -
Technology agnostic- Por ser um texto simples, o XML é independente de tecnologia. Ele pode ser usado por qualquer tecnologia para fins de armazenamento e transmissão de dados.
Human readable- XML usa formato de texto simples. É legível e compreensível por humanos.
Extensible - em XML, tags personalizadas podem ser criadas e usadas com muita facilidade.
Allow Validation - Usando XSD, estrutura DTD e XML pode ser validada facilmente.
A seguir estão as desvantagens do uso de XML -
Redundant Syntax - Normalmente o arquivo XML contém muitos termos repetitivos.
Verbose- Por ser uma linguagem prolixa, o tamanho do arquivo XML aumenta os custos de transmissão e armazenamento.
Analisar XML refere-se a passar por um documento XML para acessar dados ou modificar dados de uma ou outra maneira.
O XML Parser fornece uma maneira de acessar ou modificar dados presentes em um documento XML. Java oferece várias opções para analisar documentos XML.
A seguir estão vários tipos de analisadores que são comumente usados para analisar documentos XML -
Dom Parser - Analisa o documento carregando o conteúdo completo do documento e criando sua árvore hierárquica completa na memória.
SAX Parser- Analisa o documento em gatilhos baseados em eventos. Não carrega o documento completo na memória.
JDOM Parser - Analisa o documento de maneira semelhante ao analisador DOM, mas de maneira mais fácil.
StAX Parser - Analisa o documento de maneira semelhante ao analisador SAX, mas de maneira mais eficiente.
XPath Parser - Analisa o XML com base na expressão e é amplamente usado em conjunto com o XSLT.
DOM4J Parser - Uma biblioteca java para analisar XML, XPath e XSLT usando Java Collections Framework, fornece suporte para DOM, SAX e JAXP.
DOM significa Document Object Model.
DOM significa Document Object Model e é uma recomendação oficial do World Wide Web Consortium (W3C). Ele define uma interface que permite que os programas acessem e atualizem o estilo, a estrutura e o conteúdo dos documentos XML. Os analisadores XML que suportam o DOM implementam essa interface.
Você deve usar um analisador DOM quando -
Você precisa saber muito sobre a estrutura de um documento
Você precisa mover partes do documento (você pode querer classificar certos elementos, por exemplo)
Você precisa usar as informações no documento mais de uma vez
Ao analisar um documento XML com um analisador DOM, você obtém uma estrutura em árvore que contém todos os elementos do seu documento. O DOM fornece uma variedade de funções que você pode usar para examinar o conteúdo e a estrutura do documento.
O DOM é uma interface comum para manipular estruturas de documentos. Um de seus objetivos de design é que o código Java escrito para um analisador compatível com DOM deve ser executado em qualquer outro analisador compatível com DOM sem alterações.
O DOM define várias interfaces Java. Aqui estão as interfaces mais comuns -
Node - O tipo de dados base do DOM.
Element - A grande maioria dos objetos com os quais você lidará são Elementos.
Attr Representa um atributo de um elemento.
Text O conteúdo real de um Elemento ou Atr.
DocumentRepresenta todo o documento XML. Um objeto Document é freqüentemente referido como uma árvore DOM.
Quando você está trabalhando com o DOM, existem vários métodos que você usa com frequência -
Document.getDocumentElement() - Retorna o elemento raiz do documento.
Node.getFirstChild() - Retorna o primeiro filho de um determinado Nó.
Node.getLastChild() - Retorna o último filho de um determinado Nó.
Node.getNextSibling() - Esses métodos retornam o próximo irmão de um determinado Nó.
Node.getPreviousSibling() - Esses métodos retornam o irmão anterior de um determinado Nó.
Node.getAttribute(attrName) - Para um determinado Nó, retorna o atributo com o nome solicitado.
Sim! Usando o analisador DOM, podemos analisar, modificar ou criar um documento XML.
SAX significa API Simples para XML.
SAX Parser é um analisador baseado em eventos para documentos xml.
SAX (a API simples para XML) é um analisador baseado em eventos para documentos xml. Ao contrário de um analisador DOM, um analisador SAX não cria nenhuma árvore de análise. SAX é uma interface de streaming para XML, o que significa que os aplicativos que usam SAX recebem notificações de eventos sobre o documento XML que está sendo processado como um elemento e um atributo, em um momento em ordem sequencial começando no topo do documento e terminando com o fechamento do Elemento ROOT.
Você deve usar um analisador SAX quando -
Você pode processar o documento XML de maneira linear de cima para baixo
O documento não está profundamente aninhado
Você está processando um documento XML muito grande, cuja árvore DOM consumiria muita memória. Implementações típicas de DOM usam dez bytes de memória para representar um byte de XML
O problema a ser resolvido envolve apenas parte do documento XML
Os dados estão disponíveis assim que são vistos pelo analisador, então SAX funciona bem para um documento XML que chega por meio de um fluxo
Não temos acesso aleatório a um documento XML, pois ele é processado somente de encaminhamento
Se você precisa acompanhar os dados que o analisador viu ou alterar a ordem dos itens, você deve escrever o código e armazenar os dados por conta própria
A interface ContentHandler especifica os métodos de retorno de chamada que o analisador SAX usa para notificar um programa de aplicativo sobre os componentes do documento XML que ele viu.
void startDocument() - Chamado no início de um documento.
void endDocument() - Chamado no final de um documento.
void startElement(String uri, String localName, String qName, Attributes atts) - Chamado no início de um elemento.
void endElement(String uri, String localName,String qName) - Chamado no final de um elemento.
void characters(char[] ch, int start, int length) - Chamado quando os dados do personagem são encontrados.
void ignorableWhitespace( char[] ch, int start, int length) - Chamado quando um DTD está presente e um espaço em branco ignorável é encontrado.
void processingInstruction(String target, String data) - Chamado quando uma instrução de processamento é reconhecida.
void setDocumentLocator(Locator locator)) - Fornece um localizador que pode ser usado para identificar posições no documento.
void skippedEntity(String name) - Chamado quando uma entidade não resolvida é encontrada.
void startPrefixMapping(String prefix, String uri) - Chamado quando um novo mapeamento de namespace é definido.
void endPrefixMapping(String prefix) - Chamado quando uma definição de namespace termina seu escopo.
Interface de atributos especifica métodos para processar os atributos conectados a um elemento.
int getLength() - Retorna o número de atributos.
String getQName(int index)
String getValue(int index)
String getValue(String qname)
Não! Usando o analisador SAX, podemos apenas analisar ou modificar um documento XML.
JDOM é uma biblioteca de código aberto baseada em java para analisar documentos XML e é normalmente uma API amigável para desenvolvedores Java.
Ele é otimizado para java, ele usa uma coleção de java como List e Arrays. Ele funciona com APIs DOM e SAX e combina o melhor dos dois. Ele ocupa pouco espaço de memória e é quase tão rápido quanto o SAX.
Você deve usar um analisador JDOM quando -
Você precisa saber muito sobre a estrutura de um documento.
Você precisa mover partes do documento (você pode querer classificar certos elementos, por exemplo).
Você precisa usar as informações do documento mais de uma vez.
Você é um desenvolvedor Java e deseja aproveitar a análise otimizada de Java de XML.
Ao analisar um documento XML com um analisador JDOM, você obtém a flexibilidade de obter de volta uma estrutura em árvore que contém todos os elementos do seu documento sem afetar a área de cobertura da memória do aplicativo. O JDOM fornece uma variedade de funções utilitárias que você pode usar para examinar o conteúdo e a estrutura do documento, caso o documento seja bem estruturado e sua estrutura seja conhecida.
O JDOM oferece aos desenvolvedores java flexibilidade e fácil manutenção do código de análise xml. É API leve e rápido.
O JDOM define várias classes Java. Aqui estão as classes mais comuns -
Document- Representa todo o documento XML. Um objeto Document é freqüentemente referido como uma árvore DOM.
Element- Representa um elemento XML. O objeto Element possui métodos para manipular seus elementos filhos, seu texto, atributos e namespaces.
AttributeRepresenta um atributo de um elemento. O atributo tem um método para obter e definir o valor do atributo. Tem pai e tipo de atributo.
Text Representa o texto da tag XML.
Comment Representa os comentários em um documento XML.
Quando você está trabalhando com o JDOM, existem vários métodos que você usa com frequência -
SAXBuilder.build(xmlSource) - Construa o documento JDOM a partir do código-fonte xml.
Document.getRootElement() - Obtenha o elemento raiz do XML.
Element.getName() - Obtenha o nome do nó XML.
Element.getChildren() - Obtenha todos os nós filhos diretos de um elemento.
Node.getChildren(Name) - Obtenha todos os nós filhos diretos com um determinado nome.
Node.getChild(Name) - Obtenha o primeiro nó filho com o nome fornecido.
Sim! Usando o analisador JDOM, podemos analisar, modificar e criar um documento XML.
StAX é uma API baseada em JAVA para analisar documentos XML de forma semelhante ao analisador SAX, mas StAX é uma API PULL, enquanto SAX é uma API PUSH. Isso significa que no caso do analisador StAX, o aplicativo cliente precisa pedir ao analisador StAX para obter informações do XML sempre que precisar, mas no caso do analisador SAX, o aplicativo cliente é necessário para obter informações quando o analisador SAX notifica o aplicativo cliente de que as informações estão disponíveis.
Sim! Usando o analisador StAX, podemos analisar, modificar e criar um documento XML.
Sim! StAX é uma API PULL.
Você deve usar um analisador StAX quando -
Você pode processar o documento XML de maneira linear de cima para baixo.
O documento não está profundamente aninhado.
Você está processando um documento XML muito grande cuja árvore DOM consumiria muita memória. Implementações típicas de DOM usam dez bytes de memória para representar um byte de XML.
O problema a ser resolvido envolve apenas parte do documento XML.
Os dados estão disponíveis assim que são vistos pelo analisador, portanto, StAX funciona bem para um documento XML que chega por meio de um fluxo.
Não temos acesso aleatório a um documento XML, pois ele é processado somente de encaminhamento
Se você precisa acompanhar os dados que o analisador viu ou alterar a ordem dos itens, você deve escrever o código e armazenar os dados por conta própria
Esta classe fornece iterador de eventos que pode ser usado para iterar sobre os eventos à medida que ocorrem durante a análise do documento XML.
StartElement asStartElement() - usado para recuperar o valor e os atributos do elemento.
EndElement asEndElement() - chamado no final de um elemento.
Characters asCharacters() - pode ser usado para obter caracteres como CDATA, espaço em branco etc.
Esta interface especifica métodos para criar um evento.
add(Event event) - Adicionar eventos contendo elementos ao XML.
Esta classe fornece iterador de eventos que podem ser usados para iterar sobre os eventos conforme eles ocorrem durante a análise do documento XML
int next() - usado para recuperar o próximo evento.
boolean hasNext() - usado para verificar se outros eventos existem ou não
String getText() - usado para obter o texto de um elemento
String getLocalName() - usado para obter o nome de um elemento
Esta interface especifica métodos para criar um evento.
writeStartElement(String localName) - Adicione o elemento inicial do nome fornecido.
writeEndElement(String localName) - Adicione o elemento final do nome fornecido.
writeAttribute(String localName, String value) - Grave o atributo em um elemento.
O XPath é uma recomendação oficial do World Wide Web Consortium (W3C). Ele define um idioma para localizar informações em um arquivo XML. É usado para percorrer elementos e atributos de um documento XML. XPath fornece vários tipos de expressões que podem ser usadas para consultar informações relevantes do documento XML.
A seguir estão os principais componentes do XPath -
Structure Definitions - XPath define as partes de um documento XML como elemento, atributo, texto, namespace, instrução de processamento, comentário e nós de documento.
Path Expressions XPath fornece nós de seleção de expressões de caminho poderosas ou lista de nós em documentos XML.
Standard FunctionsXPath fornece uma rica biblioteca de funções padrão para manipulação de valores de string, valores numéricos, comparação de data e hora, manipulação de nó e QName, manipulação de sequência, valores booleanos etc.
Major part of XSLTXPath é um dos principais elementos do padrão XSLT e é necessário ter conhecimento para trabalhar com documentos XSLT.
W3C recommendationXPath é a recomendação oficial do World Wide Web Consortium (W3C).
Os predicados são usados para encontrar um nó específico ou um nó que contém um valor específico e são definidos usando [...].
Expressão | Resultado |
---|---|
/ class / student [1] | Seleciona o primeiro elemento de aluno que é filho do elemento de classe. |
/ classe / aluno [último ()] | Seleciona o último elemento de aluno que é filho do elemento de classe. |
/ classe / aluno [último () - 1] | Seleciona o último, exceto um elemento de aluno que é filho do elemento de classe. |
// aluno [@ rollno = '493'] | Seleciona todos os elementos do aluno que possuem um atributo chamado rollno com um valor de '493' |
XPath usa uma expressão de caminho para selecionar o nó ou lista de nós de um documento xml. A seguir está a lista de caminhos e expressões úteis para selecionar qualquer nó / lista de nós de um documento xml.
Expressão | Descrição |
---|---|
nome do nó | Selecione todos os nós com o nome "nodename" fornecido |
/ | A seleção começa a partir do nó raiz |
// | A seleção começa a partir do nó atual que corresponde à seleção |
. | Seleciona o nó atual |
.. | Seleciona o pai do nó atual |
@ | Seleciona atributos |
aluna | Exemplo - Seleciona todos os nós com o nome "aluno" |
classe / aluno | Exemplo: Seleciona todos os elementos do aluno que são filhos da classe |
//aluna | Seleciona todos os elementos do aluno, não importa onde eles estejam no documento |
Não! O analisador XPath é usado para navegar apenas em documentos XML. É melhor usar o analisador DOM para criar XML.
DOM4J é uma biblioteca de código aberto baseada em java para analisar documentos XML e é uma API altamente flexível, de alto desempenho e com uso eficiente de memória. Ele é otimizado para java, ele usa uma coleção de java como List e Arrays. Funciona com DOM, SAX, XPath e XSLT. Ele pode analisar documentos XML grandes com uma pegada de memória muito baixa.
Você deve usar um analisador DOM4J quando -
Você precisa saber muito sobre a estrutura de um documento
Você precisa mover partes do documento (você pode querer classificar certos elementos, por exemplo)
Você precisa usar as informações no documento mais de uma vez
Você é um desenvolvedor Java e deseja aproveitar a análise otimizada de Java de XML.
Ao analisar um documento XML com um analisador DOM4J, você obtém a flexibilidade de obter de volta uma estrutura de árvore que contém todos os elementos do seu documento sem afetar a área de cobertura da memória do aplicativo. O DOM4J fornece uma variedade de funções utilitárias que você pode usar para examinar o conteúdo e a estrutura do documento, caso o documento seja bem estruturado e sua estrutura seja conhecida. DOM4J usa a expressão XPath para navegar pelo documento XML.
DOM4J dá aos desenvolvedores java flexibilidade e fácil manutenção do código de análise xml. É API leve e rápido.
O DOM4J define várias classes Java. Aqui estão as classes mais comuns -
Document- Representa todo o documento XML. Um objeto Document é freqüentemente referido como uma árvore DOM.
Element- Representa um elemento XML. O objeto Element possui métodos para manipular seus elementos filhos, seu texto, atributos e namespaces.
AttributeRepresenta um atributo de um elemento. O atributo tem um método para obter e definir o valor do atributo. Tem pai e tipo de atributo.
Node Representa Elemento, Atributo ou ProcessingInstruction
Quando você está trabalhando com o DOM4J, existem vários métodos que você usa com frequência -
SAXReader.read(xmlSource)() - Construa o documento DOM4J a partir da fonte xml.
Document.getRootElement() - Obtenha o elemento raiz do XML.
Element.node(index) - Obtenha o nó XML em um índice específico no elemento.
Element.attributes() - Obtenha todos os atributos de um elemento.
Node.valueOf(@Name) - Obtenha o valor de um atributo com o nome dado do elemento.
Sim! Usando o analisador DOM4J, podemos analisar, modificar e criar um documento XML.