StAX Parser: descripción general
StAX es una API basada en JAVA para analizar documentos XML de forma similar a como lo hace el analizador SAX. Pero hay dos puntos principales de diferencia entre las dos API:
StAX es una API PULL mientras que SAX es una API PUSH. Significa que en el caso del analizador StAX, la aplicación cliente necesita pedirle al analizador StAX que obtenga información de XML siempre que lo necesite, pero en el caso del analizador SAX, se requiere que la aplicación cliente obtenga información cuando el analizador SAX notifica a la aplicación cliente esa información. está disponible.
StAX API puede leer y escribir documentos XML. Usando SAX API, XML solo se puede leer.
Las siguientes son las características de la API de StAX:
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 al programa de aplicación sobre 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 el lector de "cursor" que actúa como un puntero a los nodos xml.
A medida que se identifican los eventos, los elementos xml se pueden recuperar del objeto de evento y se pueden procesar más.
¿Cuándo usar?
Debería utilizar 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á 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 los ve el analizador, por lo que StAX funciona bien para un documento XML que llega a través de una secuencia.
Desventajas de SAX
No tenemos acceso aleatorio a un documento XML, ya que se procesa solo de forma reenviada.
Si necesita realizar un seguimiento de los datos que el analizador ha visto o cambiar el orden de los elementos, debe escribir el código y almacenar los datos por su cuenta.
Clase XMLEventReader
Esta clase proporciona el iterador de eventos que se puede usar para iterar sobre eventos a medida que ocurren mientras se analiza el documento XML.
StartElement asStartElement() - Utilizado para recuperar valor y atributos del elemento.
EndElement asEndElement() - Llamado al final de un elemento.
Characters asCharacters() - Se puede utilizar para obtener caracteres como CDATA, espacios en blanco, etc.
Clase XMLEventWriter
Esta interfaz especifica métodos para crear un evento.
add(Event event) - Agrega eventos que contienen elementos a XML.
XMLStreamReader (clase)
Esta clase proporciona un iterador de eventos que se puede usar para iterar sobre los eventos a medida que ocurren mientras se analiza el documento XML.
int next() - Se utiliza para recuperar el próximo evento.
boolean hasNext() - Se utiliza para comprobar que existen más eventos o no
String getText() - Se usa para obtener el texto de un elemento.
String getLocalName() - Se usa para obtener el nombre de un elemento.
XMLStreamWriter (clase)
Esta interfaz especifica métodos para crear un evento.
writeStartElement(String localName) - Agrega el elemento de inicio de un nombre dado.
writeEndElement(String localName) - Agrega el elemento final de un nombre dado.
writeAttribute(String localName, String value) - Escribe un atributo en un elemento.