# API Java para processamento de XML

A API Java para Processamento de XML, ou JAXP (pronúncia em inglês: JAKS-pee), é uma das APIs de programação Java XML. Ela fornece a capacidade de validação e análise de documentos XML.
A análise de três interfaces básicas são:
* O Modelo de Documento de Objeto ou interface DOM
* A API simples de serialização para XML ou interface SAX
* A API de serialização para XML ou interface StAX (parte do JDK 6; pacotes .jar separados disponíveis para JDK 5)
Além de analisar as interfaces, a API de serialização fornece uma interface XSLT para fornecer dados e transformações estruturais em um documento XML. JAXP foi desenvolvido sob a Comunidade de Processos Java como JSR 5 (JAXP 1.0) e JSR 63 (JAXP 1.1 e 1.2).
| versão J2SE | Versão pacote JAXP |
| 1.4 | 1.1 |
| 1.5 | 1.3 |
| 1.6 | 1.4 |
JAXP versão 1.4.4 foi lançado em 03 de setembro de 2010. JAXP 1.3 era end-of-lifed em 12 de fevereiro, 2008.

## Interface DOM

A interface DOM é talvez o mais fácil de entender. Ele analisa um documento XML inteiro e constrói uma representação completa do documento na memória usando as classes de modelagem dos conceitos encontrados no Modelo de Documento de Objeto (DOM) Corpo de Especificação Nível 2.
O analisador DOM é chamado de Construtor de Documento (DocumentBuilder), assim como se constrói uma representação de Documento (Document) na memória. O [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/javax/xml/parsers/DocumentBuilder.html javax.xml.parsers.DocumentBuilder] é criado pela [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/javax/xml/parsers/DocumentBuilderFactory.html javax.xml.parsers.DocumentBuilderFactory]. O Construtor de Documento (DocumentBuilder) cria uma instância [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/org/w3c/dom/Document.html org.w3c.dom.Document] , que é uma estrutura de árvore contendo os nós no documento XML. Cada nó de árvore na estrutura implementa a interface [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/org/w3c/dom/Node.html org.w3c.dom.Node] . Há muitos tipos diferentes de nós de árvore, representando os tipos de dados encontrados em um documento XML. Os tipos de nó mais importantes são:
* Nós de elemento que pode ter atributos
* Nós de texto que representam o texto encontrado entre as tags de início e fim de um elemento do documento.
Consulte a Javadoc documentação do Pacote Java [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/org/w3c/dom/package-summary.html org.w3c.dom] para uma lista completa de tipos de nó.

## Interface SAX

O analisador SAX é chamado de [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/javax/xml/parsers/SAXParser.html SAXParser] e é criado pela [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/javax/xml/parsers/SAXParserFactory.html javax.xml.parsers.SAXParserFactory]. Ao contrário do analisador DOM, o analisador SAX não cria uma representação em memória do documento XML e assim é mais rápido e usa menos memória. Em vez disso, o analisador SAX informa aos clientes da estrutura do documento XML por invocando chamadas de retorno, isto é, ao invocar métodos em uma [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/org/xml/sax/helpers/DefaultHandler.html org.xml.sax.helpers.DefaultHandler] instância fornecida para o analisador. Esta forma de acesso a documento é chamado de Serialização do XML (Streaming XML).
A Classe Manipulador Padrão (DefaultHandler) implementa as intefaces [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/org/xml/sax/ContentHandler.html ContentHandler], [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/org/xml/sax/ErrorHandler.html ErrorHandler], [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/org/xml/sax/DTDHandler.html DTDHandler], e [[[:Predefinição:Javadoc:SE/Home URL]]docs/api/org/xml/sax/EntityResolver.html EntityResolver]. A maioria dos clientes estarão interessados ​​em métodos definidos na interface Manipulador de Conteúdo (ContentHandler) que são chamadas quando o analisador SAX encontra os elementos correspondentes no documento XML. Os métodos mais importantes nesta interface são:
* StartDocument e endDocument métodos que são chamados no início e no fim de um documento XML.
* StartElement e endElement métodos que são chamados no início e no final de um elemento do documento.
* Caracteres método que é chamado com o conteúdo de texto de dados contidos entre o início e o fim das marcas Tags de um elemento do documento XML.
Clientes fornecem uma subclasse da Manipulador Padrão que substitui esses métodos e processa os dados. Isso pode envolver a armazenagem dos dados em um banco de dados ou gravando-os em uma serialização(Stream).
Durante a análise, o analisador pode precisar acessar documentos externos. É possível armazenar um cache local para documentos usados ​​com freqüência usando um Catálogo XML.
Esta foi introduzida com o Java 1.3 maio de 2000.

## Interface StAX

StAX foi concebido como uma média entre o DOM e interface SAX. Na sua metáfora, o ponto de entrada programática é um cursor que representa um ponto dentro do documento. A aplicação move o cursor para a frente - 'puxar' as informações do analisador como ele precisa. Isto é diferente de um evento baseado na API de serialização para - como SAX - que 'empurra' os dados para o aplicativo - exige também que a aplicação mantenha o estado entre os eventos que forem necessárias para manter o controle de localização dentro do documento.

## Interface XSLT

A Linguagem de Folha de Estilos parágrafo Transformações XML (XML Stylesheet Language for Transformations), ou XSLT, permite a conversão de um documento XML em outras formas de dados. JAXP fornece interfaces no pacote javax.xml.transform permitindo que os aplicativos invoquem uma transformação XSLT. Esta interface foi originalmente chamado TrAX (API de Transformação de XML), e foi desenvolvido por uma colaboração informal entre os desenvolvedores de um número de processadores XSLT JAVA.
As Principais características da interface são
* Uma classe de fábrica permitindo que o aplicativo selecione dinamicamente qual processador deseja utilizar
* Métodos na classe de fábrica para criar Modelos de Objetos, representando a forma compilada de uma folha de estilo. Este é um objeto thread-safe que pode ser usada repetidamente, em série ou em paralelo, para aplicar a mesma folha de estilo para documentos de múltiplas fontes (ou a mesma fonte o documento com parâmetros diferentes)
* Um método nos modelos de objeto para criar um Transformador, representando a forma executável de uma folha de estilo. Isso não pode ser compartilhado entre threads, embora sejam serialmente reutilizáveis. O transformador fornece métodos para definir os parâmetros de estilo e opções de serialização (por exemplo, se a saída deve ser recuada - identação), e um método para realmente executar a transformação.
Duas interfaces abstratas Fonte e Resultado são definidas para representar a entrada e a saída da transformação. Este é um uso pouco convencional de interfaces Java, já que não há expectativa de que um processador irá aceitar qualquer classe que implementa a interface - cada processador pode escolher quais tipos de fonte ou Resultado que estão preparados para lidar. Na prática, todos os processadores JAXP apoiam os três tipos padrão de fonte (DOMSource, SAXSource, StreamSource) e os três tipos padrão de Resultado (código DOMResult , SAXResult, StreamResult ) e, possivelmente, outras implementações próprias.