Parser Java XML – Código completo

El siguiente código puede utilizarse para analizar cadenas XML. El contenido analizado está organizado en forma de un Java Hashtable. A continuación se muestra el código utilizado para el análisis. Requiere el «xerces.jar » y el «parser.jar» suministrados por IBM. El contenido analizado está organizado en forma de un Java Hashtable. Para saber más sobre Java y XML, puede consultar mi artículo anterior sobre Java y XML.

Clases de //XML a importar
importando org.apache.xerces.parsers.DOMParser;
import org.apache.xerces.dom.DocumentImpl;
import org.xml.saxo.InputSource;
import org.w3c.dom.*;
// Clases estándar de Java a importar
importar java.util.Vector;
importar java.util.Hashtable;
importar java.io.ByteArrayInputStream;
public class XmlParser
{
privado XmlParser()
{
}
/**
* leaXml. Convierte la cadena XML en el objeto Message
*
* @param String La cadena XML a ser analizada
* @param String La etiqueta de la raíz en la cadena
* @Vector de Retorno Un vector de hachís. Cada tabla de hachís es un
* lista de pares de valores clave como se ve en el XML
*/
Public static Vector readXml (String xmlString, String rootTag)
lanza la Excepción
{
Mensajes vectoriales = nuevo Vector();
prueba
{
Document doc = getDocument (xmlString);
mensajes = getMessages (doc, rootTag);
}
captura (NullPointerException e)
{
lanzar una nueva excepción («readXml: No data in XML»);
}
captura (Excepción e)
{
Lanza E;
}
devolver los mensajes;
}
/**
* getDocument. Recupera el documento que representa el XML
*
* @param String
* @Documento de retorno
*/
Documento privado estático getDocument (String xmlString)
lanza la Excepción
{
Document doc = new org.apache.xerces.dom.DocumentImpl();
prueba
{
ByteArrayInputStream xmlByteArray =
nuevo ByteArrayInputStream (xmlString.getBytes());
InputSource xmlInput = new InputSource (xmlByteArray);
DOMParser ps = nuevo DOMParser();
ps.parse (xmlInput);
doc = ps.getDocument();
}
captura (Excepción e) {
lanzar una nueva Excepción («getDocument: Parsing Error»);
}
Devuelva el doctor;
}
/*
* Este método privado analiza el documento XML y lo convierte
* en un Vector que contiene Hashtables de mensajes
* Llama al método privado parseNode para obtener los Hashtables
*/
Vector estático privado getMessages (Document doc, String rootTag)
lanza la Excepción
{
Mensajes vectoriales = nuevo Vector();
intenta {
NodeList rootList = doc.getElementsByTagName (rootTag);
if (rootList.getLength() != 1)
{
lanzar una nueva excepción («getMessages: Invalid XML»);
}
Nodo raíz = rootList.item(0);
Nodo padre = root.getParentNode();
if (parent == null || parent.getNodeType() != Nodo.DOCUMENT_NODE)
{
lanzar una nueva excepción («getMessages: Invalid XML»);
}
NodeList children = root.getChildNodes();
int childSize = children.getLength();
for (int childIndex = 0; childIndex
{
Nodo niño = niños.item (ChildIndex);
if (child.getNodeType() == Nodo.ELEMENT_NODE)
{
Hashtable messageHtb = parseNode (niño);
messages.addElement (messageHtb);
}
}
}
captura (Excepción e)
{
lanzar una nueva excepción («getMessages: Parsing Error»);
}
devolver los mensajes;
}
/*
* Este método privado convierte todos los datos del nodo en un Hashtable
*/
Hashtable parseNode estático privado (Node messageNode)
lanza la Excepción
{
Hashtable messageHtb = new Hashtable();
String removeColumn = null;
prueba
{
Columnas de la lista de nodos = messageNode.getChildNodes();
int noOfColumns = columns.getLength();
String columnName = null, columnData = null;
int dataCounter = 0;
for (int index = 0; index
{
Nodo nodal = columnas.artículo (índice);
if (node.getNodeType() == Node.ELEMENT_NODE)
{
Columna de elementos = (Elemento) nodo;
columnName = column.getNodeName();
NodeList dataNodes = column.getChildNodes();
int dataTexts = dataNodes.getLength();
for (int dataIndex=0; dataIndex{
Nodo dataNode = dataNodes.item (dataIndex);
if (dataNode.getNodeType() == Nodo.NODO_TEXTO)
{
columnData = dataNode.getNodeValue().trim();
si (columnData.equals(«») ||
columnData.equals(«r»))
{
Continúa;
}
más
{
Objeto colData = mensajeHtb.get (nombre de la columna);
if (colData == null)
{
si (dataCounter != 0)
{
dataCounter = 0;
messageHtb.remove (removeColumn);
removeColumn = null;
}
messageHtb.put (columnName, columnData);
}
más
{
removeColumn = columnName;
dataCounter ++;
String colName = columnName +
String.valueOf (contador de datos);
si (dataCounter == 1)
{
messageHtb.put (colName, colData);
dataCounter ++;
colName = columnName +
String.valueOf (contador de datos);
messageHtb.put (colName, columnData);
}
más
{
messageHtb.put (colName, columnData);
}
} // Fin – colData = null
} // Fin – columnaDatos = en blanco
} // End – dataNode = Node.TEXT_NODE
} // Fin – Bucle para todos los niños en un nodo
} // Fin – Si el nodo es Elemento
} // Fin – Bucle para todas las columnas
}
captura (Excepción e)
{
lanzar una nueva Excepción («parseNode: Parsing Error»);
}
si (remover la columna != nulo)
{
messageHtb.remove (removeColumn);
}
devolver mensajeHtb;
}
}

Buscar palabras clave: IBM XML4J, Java, XML Parser.

Rate this post

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio