Creación y Persistencia de Datos XML en Java: Ejercicios Prácticos con la Librería XOM

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 8,49 KB

Creación y Manipulación de Documentos XML con Java y XOM

Ejercicio 1: Creación de un Archivo XML Básico

Escriba un programa Java que cree el siguiente archivo XML (mensaje.xml):

<mensajes>
    <mensaje>Hola, mundo</mensaje>
</mensajes>

Código Java: HolaMundoXML

import nu.xom.*;
import java.io.FileOutputStream;
import java.io.IOException;

public class HolaMundoXML {
    public static void main(String[] args) {
        // Crear los elementos
        Element raiz = new Element("mensajes");
        Element mensaje = new Element("mensaje");

        // Crear el documento
        mensaje.appendChild("Hola, mundo");
        raiz.appendChild(mensaje);
        Document doc = new Document(raiz);

        // Guardar el documento
        try {
            FileOutputStream f = new FileOutputStream("mensaje.xml");
            Serializer serial = new Serializer(f);
            serial.setIndent(4); // Opcional: mejora la legibilidad del XML
            serial.write(doc);
            f.close();
            System.out.println("Ok");
        } catch (IOException exc) {
            System.err.println("ERROR de archivo: " + exc.getMessage());
        }
    }
}

Ejercicio 2: Creación de un Catálogo de Biblioteca Interactivo

Escriba un programa que permita al usuario introducir datos de varios libros (título y autor) y genere un archivo XML llamado biblioteca.xml. El programa debe capturar las excepciones que se puedan producir, mostrando un mensaje informativo.

El archivo XML generado tendrá la siguiente estructura (ejemplo):

<biblioteca>
    <libro>
        <titulo>La historia interminable</titulo>
        <autor>Michael Ende</autor>
    </libro>
    <libro>
        <titulo>Don Quijote</titulo>
        <autor>Miguel de Cervantes Saavedra</autor>
    </libro>
    ...
</biblioteca>

Código Java: P8_Ejercicio2 (Generación Dinámica)

package p8_ejercicio2;

import java.io.*;
import nu.xom.*;
import java.util.Scanner;
import java.util.InputMismatchException;

public class P8_Ejercicio2 {

    public static void main(String[] args) {
        Element raiz = new Element("biblioteca");
        Scanner teclado = new Scanner(System.in);
        
        System.out.println("¿Cuántos libros quiere almacenar?");
        
        int j = 0;
        try {
            j = teclado.nextInt();
        } catch (InputMismatchException e) {
            System.err.println("Entrada inválida. Se asumirá 0 libros.");
        }
        teclado.nextLine(); // Consumir el salto de línea

        for (int i = 0; i < j; i++) {
            Element libro = new Element("libro");
            Element autor = new Element("autor");
            Element titulo = new Element("titulo");
            
            System.out.println("--- Libro " + (i + 1) + " ---");
            
            System.out.println("Inserte título:");
            String t = teclado.nextLine();
            titulo.appendChild(t);
            libro.appendChild(titulo);
            
            System.out.println("Inserte autor:");
            String a = teclado.nextLine();
            autor.appendChild(a);
            libro.appendChild(autor);
            
            raiz.appendChild(libro);
        }
        
        Document doc = new Document(raiz);
        
        // Serialización y guardado del documento
        try {
            FileOutputStream f = new FileOutputStream("biblioteca.xml");
            Serializer serial = new Serializer(f);
            serial.setIndent(4);
            serial.write(doc);
            f.close();
            System.out.println("Ok");
        } catch (IOException exc) {
            System.err.println("ERROR de archivo: " + exc.getMessage());
        }
    }
}

Ejercicio 3: Lectura y Visualización de Documentos XML

Escriba un programa que tome el archivo biblioteca.xml creado en el punto anterior y lo vuelque por pantalla. Captura las excepciones de parseo y de entrada/salida que se puedan producir, mostrando un mensaje informativo.

Código Java: Ejercicio3 (Lectura de XML)

package ejercicio3;

import java.io.*;
import nu.xom.*;

public class Ejercicio3 {
    // Definición de constantes para las etiquetas
    public static final String ETQ_BIBLIOTECA = "biblioteca";
    public static final String ETQ_LIBRO = "libro";
    public static final String ETQ_TITULO = "titulo";
    public static final String ETQ_AUTOR = "autor";
    public static final String FICHERO = "biblioteca.xml";

    public static void main(String[] args) {
        Builder parser = new Builder();
        
        try {
            // 1. Construir el documento a partir del archivo
            Document doc = parser.build(new File(FICHERO));
            
            // 2. Obtener los elementos hijos del elemento raíz (los libros)
            Elements elementos = doc.getRootElement().getChildElements();
            
            System.out.println("Contenido del archivo: " + FICHERO);
            
            // 3. Iterar sobre los libros y mostrar sus datos
            for (int i = 0; i < elementos.size(); i++) {
                Element unLibro = elementos.get(i);
                System.out.println("-------------------------");
                
                // Se asume que el elemento es un libro
                String titulo = unLibro.getFirstChildElement(ETQ_TITULO).getValue().trim();
                String autor = unLibro.getFirstChildElement(ETQ_AUTOR).getValue().trim();
                
                System.out.println("Título: " + titulo);
                System.out.println("Autor: " + autor);
            }
            System.out.println("-------------------------");
            
            // 4. Mostrar el XML completo usando la función toXML() de la librería XOM
            System.out.println("\nProbando toXML() de la librería:");
            System.out.println(doc.toXML());
            
        } catch (ParsingException e) {
            System.err.println("ERROR de parseo XML: El archivo no es válido o está mal formado.");
            System.err.println("Detalles: " + e.getMessage());
        } catch (IOException e) {
            System.err.println("ERROR de archivo: No se pudo leer el archivo " + FICHERO + ".");
            System.err.println("Detalles: " + e.getMessage());
        }
    }
}

Diseño Orientado a Objetos para Gestión XML

Ejercicio 4: Implementación de Clases Libro y Biblioteca

Cree un programa de gestión de biblioteca, a partir de lo realizado en los dos ejercicios anteriores, que almacene datos de libros: concretamente el título, autor y año de publicación. El programa debe contener las clases Libro y Biblioteca.

Requisitos de la Clase Libro

  • Debe ofrecer el método toElement(), que devuelve la información del libro como un nodo XML Element (utilizando XOM).
  • Debe tener un constructor que cree el objeto Libro a partir de un objeto Element XML.

Requisitos de la Clase Biblioteca

  • Debe contener un constructor al que se le pase una cadena (nombre de archivo) y lea todos los datos desde el archivo XML de ese nombre.
  • Debe contener el método toXML(String nombreArchivo), que guarda la información contenida en la colección de libros a un archivo XML.

Ejercicio 5: Diseño de un Sistema de Gestión de Vehículos (Herencia y XML)

Cree un programa para gestionar los datos de los vehículos de una empresa de transporte. Este ejercicio requiere aplicar principios de herencia para modelar los diferentes tipos de vehículos y su posterior persistencia en XML.

Requisitos del Modelo de Datos

La empresa gestiona dos tipos de vehículos: Taxis y Autobuses.

Atributos Comunes (Clase Base Vehiculo):
  • Matrícula
  • Marca
  • Modelo
Atributos Específicos:
  • Taxi: Número de licencia.
  • Autobús: Número de plazas.

El programa debe ser capaz de almacenar y recuperar esta información utilizando archivos XML, aplicando técnicas de serialización similares a las desarrolladas en los ejercicios de la Biblioteca.

Entradas relacionadas: