Anuncio publicitario

¿Le gustaría aprender a leer y escribir un archivo XML desde Java?

Archivos XML ¿Qué es un archivo XML y cómo se puede abrir y utilizar?Es posible que haya visto el término "XML". Incluso podría haber abierto accidentalmente un archivo XML. ¿Qué es XML y cómo se usa? Lee mas se utilizan para una variedad de propósitos, incluido el almacenamiento de datos. Antes de que JSON se hiciera popular, XML era el formato preferido para representar, almacenar y transportar datos estructurados. Aunque la popularidad de XML ha disminuido en los últimos años, es posible que lo encuentre ocasionalmente, por lo que es importante aprender a trabajar con él desde el código.

Edición estándar de Java (SE) 10 conceptos básicos de Java que debe aprender al comenzarYa sea que esté escribiendo una GUI, desarrollando software del lado del servidor o una aplicación móvil con Android, aprender Java le será de gran utilidad. A continuación, se muestran algunos conceptos básicos de Java que le ayudarán a empezar. Lee mas

instagram viewer
incluye el API de Java para procesamiento XML (JAXP), que es un término general que cubre la mayoría de los aspectos del procesamiento XML. Éstos incluyen:

  • DOM: El modelo de objetos de documento incluye clases para trabajar con artefactos XML como elementos, nodos, atributos, etc. La API DOM carga el documento XML completo en la memoria para su procesamiento, por lo que no es muy adecuado para trabajar con archivos XML grandes.
  • SAXÓFONO: La API simple para XML es un algoritmo basado en eventos para leer XML. Aquí, XML se procesa activando eventos que se encuentran al leer XML. Los requisitos de memoria para usar este método son bajos, pero trabajar con la API es más complejo que trabajar con DOM.
  • STAX: La API de transmisión para XML es una adición reciente a las API de XML y proporciona filtrado, procesamiento y modificación de transmisión de alto rendimiento de XML. Si bien evita cargar todo el documento XML en la memoria, proporciona una arquitectura de tipo pull en lugar de que una arquitectura impulsada por eventos, por lo que la aplicación es más fácil de codificar y comprender que usar SAX API.

En este artículo, utilizamos el API DOM para demostrar cómo leer y escribir archivos XML desde java. Cubriremos las otras dos API en artículos futuros.

Un archivo XML de muestra

A los efectos de este artículo, demostramos los conceptos utilizando el siguiente XML de muestra, que se puede encontrar aquí:

 1.0?>Gambardella, MateoGuía del desarrollador XML
Computadora44.952000-10-01Una mirada en profundidad a la creación de aplicaciones con XML.Ralls, Kim... 

Leer un archivo XML

Veamos los pasos básicos necesarios para leer un archivo XML utilizando la API DOM.

El primer paso es obtener una instancia de DocumentBuilder. El constructor se utiliza para analizar documentos XML. Para uso básico, lo hacemos así:

Fábrica de DocumentBuilderFactory = DocumentBuilderFactory.newInstance (); factory.setNamespaceAware (falso); factory.setValidating (falso); Generador de DocumentBuilder = factory.newDocumentBuilder (); 

Ahora podemos cargar todo el documento en la memoria a partir del elemento raíz XML. En nuestro ejemplo, es el catalogar elemento.

Archivo archivo =...; // Archivo XML para leer. Documento document = builder.parse (archivo); Catálogo de elementos = document.getDocumentElement (); 

¡Y eso es todo, amigos! La API DOM para leer un XML es realmente simple. Ahora tiene acceso a todo el documento XML a partir de su elemento raíz, catalogar. Veamos ahora cómo trabajar con él.

Usando la API DOM

Ahora que tenemos la raíz XML Elemento, podemos utilizar la API DOM para extraer interesantes pepitas de información.

Obtener todos los libro hijos del elemento raíz y recorrerlos. Tenga en cuenta que getChildNodes () devoluciones todos niños, incluido texto, comentarios, etc. Para nuestro propósito, solo necesitamos los elementos secundarios, por lo que omitimos los demás.

NodeList libros = catalog.getChildNodes (); para (int i = 0, ii = 0, n = books.getLength (); i 

¿Cómo encuentra un elemento secundario específico, dado el padre? El siguiente método estático devuelve el primer elemento coincidente si se encuentra, o es nulo. Como puede ver, el procedimiento implica obtener la lista de nodos secundarios y recorrerlos seleccionando nodos de elementos con el nombre especificado.

Nodo privado estático findFirstNamedElement (Nodo principal, String tagName) {Hijos de NodeList = parent.getChildNodes (); for (int i = 0, in = children.getLength (); i 

Tenga en cuenta que la API DOM trata el contenido de texto dentro de un elemento como un nodo de tipo separado TEXT_NODE. Además, el contenido del texto se puede dividir en varios nodos de texto adyacentes. Por lo tanto, se requiere el siguiente procesamiento especial para obtener el contenido de texto dentro de un elemento.

static private String getCharacterData (nodo principal) {Texto de StringBuilder = nuevo StringBuilder (); if (parent == null) return text.toString (); NodeList children = parent.getChildNodes (); para (int k = 0, kn = children.getLength (); k 

Armados con estas funciones de conveniencia, veamos ahora algún código para enumerar alguna información de nuestro XML de muestra. Nos gustaría mostrar información detallada para cada libro, tal como estaría disponible en un catálogo de libros.

NodeList libros = catalog.getChildNodes (); para (int i = 0, ii = 0, n = books.getLength (); i 

Escritura de salida XML

Java proporciona la API de transformación XML para transformar datos XML. Usamos esta API con el transformación de identidad para generar salida.

Como ejemplo, agreguemos un nuevo libro elemento al catálogo de muestra presentado anteriormente. Los detalles del libro (como autor, título, etc.) se pueden obtener externamente, tal vez desde un archivo de propiedades o una base de datos. Usamos el siguiente archivo de propiedades para cargar los datos.

id = bk113. autor = Jane Austen. title = Orgullo y prejuicio. género = Romance. precio = 6,99. Publish_date = 2010-04-01. description = "Es una verdad universalmente reconocida, que un hombre soltero en posesión de una buena fortuna debe estar necesitado de una esposa." Así comienza el orgullo y Prejuicio, la ingeniosa comedia de modales de Jane Austen, una de las novelas más populares de todos los tiempos, que presenta un combate espléndidamente civilizado entre el orgulloso señor Darcy y la prejuiciosa Elizabeth Bennet mientras desarrollan su enérgico noviazgo en una serie de salas de estar del siglo XVIII. intrigas. 

El primer paso es analizar el archivo XML existente utilizando el método presentado anteriormente. El código también se muestra a continuación.

Archivo archivo =...; // Archivo XML para leer. Documento document = builder.parse (archivo); Catálogo de elementos = document.getDocumentElement (); 

Cargamos los datos del archivo de propiedades usando el Propiedades clase proporcionada con java. El código es bastante simple y se muestra a continuación.

String propsFile =...; Propiedades props = new Properties (); try (FileReader in = new FileReader (propsFile)) {props.load (in); }

Una vez cargadas las propiedades, recuperamos los valores que queremos agregar del archivo de propiedades.

String id = props.getProperty ("id"); Cadena autor = props.getProperty ("autor"); String title = props.getProperty ("título"); String genre = props.getProperty ("género"); String price = props.getProperty ("precio"); Cadena fecha_publicación = props.getProperty ("fecha_publicación"); String descr = props.getProperty ("descripción"); 

Creemos ahora un vacío libro elemento.

Elemento libro = document.createElement ("libro"); book.setAttribute ("id", id); 

Agregar los elementos secundarios al libro es trivial. Para mayor comodidad, recopilamos los nombres de los elementos requeridos en un Lista y agregue los valores en un ciclo.

Listaelnames = Arrays.asList ("autor", "título", "género", "precio", "fecha_publicación", "descripción"); for (String elname: elnames) {Element el = document.createElement (elname); Text text = document.createTextNode (props.getProperty (elname)); el.appendChild (texto); libro.appendChild (el); } catalog.appendChild (libro);

Y así es como se hace. los catalogar elemento ahora tiene el nuevo libro elemento agregado. Todo lo que queda ahora es escribir el XML actualizado.

Para escribir el XML, necesitamos una instancia de Transformador que se crea como se muestra a continuación. Tenga en cuenta que solicitamos la sangría del XML de salida utilizando el setOutputProperty () método.

TransformerFactory tfact = TransformerFactory.newInstance (); Transformador tform = tfact.newTransformer (); tform.setOutputProperty (OutputKeys. INDENT, "sí"); tform.setOutputProperty ("{ http://xml.apache.org/xslt}indent-amount", "3"); 

El último paso para generar la salida XML es aplicar la transformación. El resultado aparece en el flujo de salida, System.out.

tform.transform (nuevo DOMSource (documento), nuevo StreamResult (System.out)); 

Para escribir la salida directamente en un archivo, use lo siguiente.

tform.transform (nuevo DOMSource (documento), nuevo StreamResult (nuevo archivo ("output.xml"))); 

Y eso concluye este artículo sobre cómo leer y escribir archivos XML usando la API DOM.

¿Ha utilizado la API DOM en sus aplicaciones? ¿Cómo funcionó? Por favor háznoslo saber en los comentarios más abajo.