Saltar la navegación

6.6.1.- Características de StAX.

Las siguientes son las características de StAX API:

  • Lee un documento XML de arriba a abajo, reconociendo los tokens que componen un documento XML bien formado.
  • Los tokens se procesan en el mismo orden en que aparecen en el documento.
  • Informa sobre el programa de aplicación la naturaleza de los tokens que el analizador ha encontrado a medida que ocurren.
  • El programa de aplicación proporciona un lector de "eventos" que actúa como un iterador e itera sobre el evento para obtener la información requerida. Otro lector disponible es "cursor" que actúa como un puntero a los nodos XML.
  • A medida que se identifican los eventos, los elementos XML pueden recuperarse del objeto de evento y pueden procesarse más.

Debemos usar un analizador StAX cuando:

  • Puede procesar el documento XML de forma lineal de arriba a abajo.
  • El documento no está profundamente anidado.
  • Está procesando un documento XML muy grande cuyo árbol DOM consumiría demasiada memoria. Las implementaciones DOM típicas usan diez bytes de memoria para representar un byte de XML.
  • El problema a resolver involucra solo una parte del documento XML.
  • Los datos están disponibles tan pronto como el analizador los vea, por lo que StAX funciona bien para un documento XML que llega a través de una transmisión.

Para poder utilizar clases e interfaces de ambas API necesitamos un origen de datos XML valido. Esto lo conseguimos con la factoria XMLInputFactory:

XMLInputFactory xmlif = XMLInputFactory.newInstance();
XMLStreamReader xmlsr =xmlif.createXMLStreamReader(new FileReader("books.xml"));

o bien 

XMLInputFactory inputFactory = XMLInputFactory.newInstance();
InputStream in = new FileInputStream("books.xml");

Como deciamos anteriormente,  STAX consiste en dos API llamados lectores "Iterador" y "cursor"

¿Cómo funciona?

El analizador crea diferentes tipos de eventos a medida que avanza leyendo el documento XML de origen.

Algunos de los tipos de eventos importantes son:

  1. Comience el documento
  2. Elemento de inicio
  3. Comentarios
  4. Caracteres
  5. Elemento final
  6. Documento final

partimos del siguiente documento XML:

<? xml version = "1.0"?>
<BookCatalogue xmlns = "http://www.publishing.org">
    <Libro>
        <Título> Yogasana Vijnana: la ciencia del yoga </ Title>
        <ISBN> 81-40-34319-4 </ ISBN>
        <Cost currency = "INR"> 11.50 </ Cost>
    </ Book>
</ BookCatalogue>

Este documento genera 18 eventos entre primarios y secundarios:

#
Element/Attribute
Event
1
version="1.0"
StartDocument
2
isCData = false data = "\n" IsWhiteSpace = true
Characters
3
qname = BookCatalogue:http://www.publishing.org attributes = null namespaces = {BookCatalogue" -> http://www.publishing.org"}
StartElement
4
qname = Book attributes = null namespaces = null
StartElement
5
qname = Title attributes = null namespaces = null
StartElement
6
isCData = false data = "Yogasana Vijnana: the Science of Yoga\n\t" IsWhiteSpace = false
Characters
7
qname = Title namespaces = null
EndElement
8
qname = ISBN attributes = null namespaces = null
StartElement
9
isCData = false data = "81-40-34319-4\n\t" IsWhiteSpace = false
Characters
10
qname = ISBN namespaces = null
EndElement
11
qname = Cost attributes = {"currency" -> INR} namespaces = null
StartElement
12
isCData = false data = "11.50\n\t" IsWhiteSpace = false
Characters
13
qname = Cost namespaces = null
EndElement
14
isCData = false data = "\n" IsWhiteSpace = true
Characters
15
qname = Book namespaces = null
EndElement
16
isCData = false data = "\n" IsWhiteSpace = true
Characters
17
qname = BookCatalogue:http://www.publishing.org namespaces = {BookCatalogue" -> http://www.publishing.org"}
EndElement
18
EndDocument

Aspectos importantes:

  • Los eventos se crean en el orden en que se encuentran los elementos XML correspondientes en el documento, incluida la anidación de elementos, la apertura y el cierre de elementos, el orden de los atributos, el inicio del documento y el final del documento, y así sucesivamente.
  • Al igual que con la sintaxis XML adecuada, todos los elementos del contenedor tienen los correspondientes eventos de inicio y final; por ejemplo, cada StartElement tiene un EndElement correspondiente , incluso para elementos vacíos.
  • Los eventos de atributo se tratan como eventos secundarios, y se accede a ellos desde su evento StartElement correspondiente .
  • De forma similar a los eventos de Atributo , los eventos de Espacio de nombres se tratan como secundarios, pero aparecen dos veces y son accesibles dos veces en la secuencia de eventos, primero desde su StartElement correspondiente y luego desde su EndElement correspondiente .
  • Los eventos de caracteres se especifican para todos los elementos, incluso si esos elementos no tienen datos de caracteres. Del mismo modo, los eventos de carácter se pueden dividir entre eventos.
  • El analizador StAX mantiene una pila de espacio de nombres, que contiene información sobre todos los espacios de nombres XML definidos para el elemento actual y sus antecesores. Se puede acceder a la pila del espacio de nombres, que se expone a través de la interfaz javax.xml.namespace.NamespaceContext , mediante el prefijo del espacio de nombres o el URI.

Pregunta Verdadero-Falso

Pregunta 1

Los eventos de caracteres se especifican para todos los elementos XML