es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener el valor de un texto utilizando unmarshall.

Este es mi XML original

<Descriptions>
    <description lang='en'> Esta es la versión en inglés </description>
    <description lang='fr'> Esta es la versión en francés </description>
</Descriptions>

No puedo obtener el texto de cada descripción usando

Unmarshaller ums = JAXBContext.newInstance(Descripcion.class).createUnmarshaller();

Mi clase de Descripcion es:

import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "description")
@XmlAccessorType(XmlAccessType.FIELD)
public class Descripcion implements Serializable {

    private static final long serialVersionUID = 1L;

    @XmlAttribute(name = "lang")
    private String lang;

    @XmlElement(name = "text")
    private String text;

    public Descripcion() {
        super();
    }

    public Descripcion(String lang, String text) {
        super();
        this.lang = lang;
        this.text = text;
    }

    public String getLang() {
        return lang;
    }

    public String getText() {
        return text;
    }

    public void setLang(String lang) {
        this.lang = lang;
    }

    public void setText(String text) {
        this.text = text;
    }
}

}

Pero una vez que cambio manualmente el XML al siguiente formato, se obtiene el valor del texto.

<Descriptions>
    <description> 
        <lang>en</lang> 
        <text>Esta es la versión en inglés </text>
    </description>
    <description> 
        <lang>fr</lang> 
        <text>Esta es la versión en francés </text>
    </description>
</Descriptions>

¿Tienes alguna solución para obtener el valor del texto sin cambiar el formato XML original?
Podrías decirme tu solución, por favor?

Gracias
Linda

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no tengo la información contextual sobre el código y los posibles errores que puedan ocurrir. Sin embargo, sugiero utilizar la anotación @XmlValue en lugar de @XmlElement(name = "text") para mapear el campo text en la clase description. Esto permitirá que el deserializador interprete correctamente el formato XML original y recupere los valores de texto para cada elemento de descripción.

    Además, asegúrese de que el elemento raíz XML esté correctamente anotado con @XmlRootElement(name = "Descriptions") para asegurar que el deserializador pueda identificar correctamente el elemento raíz.

    Su clase description actualizada debería verse así:

    import java.io.Serializable;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlAccessorType(XmlAccessType.FIELD)
    public class description implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @XmlAttribute(name = "lang")
        private String lang;
    
        @XmlValue
        private String text;
    
        public description() {
            super();
        }
    
        public description(String lang, String text) {
            super();
            this.lang = lang;
            this.text = text;
        }
    
        @Override
        public String toString() {
            return "description [lang=" + lang + ", text=" + text + "]";
        }
    
        public String getLang() {
            return lang;
        }
    
        public String getText() {
            return text;
        }
    
        public void setLang(String lang) {
            this.lang = lang;
        }
    
        public void setText(String text) {
            this.text = text;
        }
    }
    

    ¡Espero que esto ayude!

Comments are closed.