Autor Tema: Ayuda con Java JAXB uso de ficheros xml leer e insertar desde archivo  (Leído 6627 veces)

@dib_vz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Mi duda es la siguiente.

Tengo un fichero xml valido para un schema que tengo en una aplicacion java.

La idea es abril ese fichero xml, que contiene datos concretos, añadir un nuevo elemento, en este caso un alumno nuevo, y volver a guardarlo.

caputara del archivo xml
Código: [Seleccionar]
<?xml version="1.0" encoding="UTF-8"?>

<Curso xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="clase.xsd">
  <profesor>
    <nombre>Juan Fernandez</nombre>
    <asignatura>Java</asignatura>
    <especialidad>Programacion</especialidad>
    <curso>2014/2015</curso>
    <modalidad>eLearnig</modalidad>
  </profesor>
  <comentario>Sin comentario</comentario>
  <alumnos>
    <alumno>
      <nombreAlumno>Frank de la jungla</nombreAlumno>
      <edad>40</edad>
      <direccion>Thailandia</direccion>
      <comentario>Intrepido aventurero</comentario>
      <telefono>556999111</telefono>
    </alumno>
    <alumno>
      <nombreAlumno>Mariano Rajoy</nombreAlumno>
      <edad>65</edad>
      <direccion>Palacio de la Moncloa</direccion>
      <comentario>Sin comentarios!!</comentario>
      <telefono>651325896</telefono>
    </alumno>
    <alumno>
      <nombreAlumno>Stepehen Hawkins</nombreAlumno>
      <edad>79</edad>
      <direccion>Cambrige</direccion>
      <comentario>The boss</comentario>
      <telefono>856321569</telefono>
    </alumno>
  </alumnos>
</curso>
captura del programa
Código: [Seleccionar]
public class JABX_clase {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)  {
        // TODO code application logic here
        try {
           
            //Creamos una instancia de la clase JABXContext para manipular las
            //clases que contiene, extraidas del schema curso.xsd
            JAXBContext jaxbContext = JAXBContext.newInstance("generated");
           
            //Objeto de tipo unmarshall para convertir los tipo xml en objetos java
            Unmarshaller u = jaxbContext.createUnmarshaller();
           
            //JAXBElement para obtener elementos del documento xml
            JAXBElement jaxbElement = (JAXBElement) u.unmarshal(
                    new FileInputStream("/home/dib_vz/claseA.xml"));
           
            //metodo para obtener el modelo de contenido y el valor de los atributos
            CursoType cursoType = (CursoType) jaxbElement.getValue();
           
            // Aqui es donde no se como seguir, para añadir nuevos elementos de tipo
            // alumno

            //
            Marshaller m = jaxbContext.createMarshaller();
            //
            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            //
            m.marshal(jaxbElement, System.out);
           
        } catch (JAXBException je) {
            System.out.println(je.getCause());
        } catch (IOException ioe) {
            System.out.println(ioe.getMessage());
        }
       
    }
   
}
captura de la clase Alumnos
Código: [Seleccionar]
public class Alumnos {

    @XmlElement(required = true)
    protected List<Alumnos.Alumno> alumno;

    /**
     * Gets the value of the alumno property.
     *
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the alumno property.
     *
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getAlumno().add(newItem);
     * </pre>
     *
     *
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link Alumnos.Alumno }
     *
     *
     * @return
     */
    public List<Alumnos.Alumno> getAlumno() {
        if (alumno == null) {
            alumno = new ArrayList<>();
        }
        return this.alumno;
    }

    public void setNombreAlumno(String hola) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    public void setEdad(String string) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }


    /**
     * <p>Clase Java para anonymous complex type.
     *
     * <p>El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase.
     *
     * <pre>
     * &lt;complexType>
     *   &lt;complexContent>
     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *       &lt;sequence>
     *         &lt;element name="nombreAlumno" type="{http://www.w3.org/2001/XMLSchema}string"/>
     *         &lt;element name="edad">
     *           &lt;simpleType>
     *             &lt;restriction base="{http://www.w3.org/2001/XMLSchema}positiveInteger">
     *               &lt;maxExclusive value="100"/>
     *             &lt;/restriction>
     *           &lt;/simpleType>
     *         &lt;/element>
     *         &lt;element name="direccion" type="{http://www.w3.org/2001/XMLSchema}string"/>
     *         &lt;element ref="{}comentario" minOccurs="0"/>
     *         &lt;element name="telefono" type="{http://www.w3.org/2001/XMLSchema}positiveInteger"/>
     *       &lt;/sequence>
     *     &lt;/restriction>
     *   &lt;/complexContent>
     * &lt;/complexType>
     * </pre>
     *
     *
     */
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "nombreAlumno",
        "edad",
        "direccion",
        "comentario",
        "telefono"
    })
    public static class Alumno {

        @XmlElement(required = true)
        protected String nombreAlumno;
        protected int edad;
        @XmlElement(required = true)
        protected String direccion;
        protected String comentario;
        @XmlElement(required = true)
        @XmlSchemaType(name = "positiveInteger")
        protected BigInteger telefono;

        /**
         * Obtiene el valor de la propiedad nombreAlumno.
         *
         * @return
         *     possible object is
         *     {@link String }
         *     
         */
        public String getNombreAlumno() {
            return nombreAlumno;
        }

        /**
         * Define el valor de la propiedad nombreAlumno.
         *
         * @param value
         *     allowed object is
         *     {@link String }
         *     
         */
        public void setNombreAlumno(String value) {
            this.nombreAlumno = value;
        }

        /**
         * Obtiene el valor de la propiedad edad.
         *
         * @return
         */
        public int getEdad() {
            return edad;
        }

        /**
         * Define el valor de la propiedad edad.
         *
         * @param value
         */
        public void setEdad(int value) {
            this.edad = value;
        }

        /**
         * Obtiene el valor de la propiedad direccion.
         *
         * @return
         *     possible object is
         *     {@link String }
         *     
         */
        public String getDireccion() {
            return direccion;
        }

        /**
         * Define el valor de la propiedad direccion.
         *
         * @param value
         *     allowed object is
         *     {@link String }
         *     
         */
        public void setDireccion(String value) {
            this.direccion = value;
        }

        /**
         * Obtiene el valor de la propiedad comentario.
         *
         * @return
         *     possible object is
         *     {@link String }
         *     
         */
        public String getComentario() {
            return comentario;
        }

        /**
         * Define el valor de la propiedad comentario.
         *
         * @param value
         *     allowed object is
         *     {@link String }
         *     
         */
        public void setComentario(String value) {
            this.comentario = value;
        }

        /**
         * Obtiene el valor de la propiedad telefono.
         *
         * @return
         *     possible object is
         *     {@link BigInteger }
         *     
         */
        public BigInteger getTelefono() {
            return telefono;
        }

        /**
         * Define el valor de la propiedad telefono.
         *
         * @param value
         *     allowed object is
         *     {@link BigInteger }
         *     
         */
        public void setTelefono(BigInteger value) {
            this.telefono = value;
        }

    }
« Última modificación: 06 de Febrero 2015, 08:23 por Alex Rodríguez »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Ayuda con JAXB
« Respuesta #1 en: 05 de Febrero 2015, 23:06 »
Hola, ¿y cuál es el problema? (o cuál es la pregunta, porque no veo que preguntes nada  ::)

Saludos!!

@dib_vz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Re:Ayuda con JAXB
« Respuesta #2 en: 05 de Febrero 2015, 23:14 »
Pues exactamente lo que dice
¿que métodos hay que utilizar en mi programa para a añadir un nuevo registro de tipo Alumno al fichero xml

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".