这是我的原始xml
<Descriptions>
<description lang='en'> This is English version </description>
<description lang='fr'> This is French version </description>
</Descriptions>我无法为每个描述获取文本
Unmarshaller ums = JAXBContext.newInstance(Description.class).createUnmarshaller();我的Decription.class是:
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")
public class description implements Serializable {
private static final long serialVersionUID = 1L;
private String lang;
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 + "]";
}
@XmlElement(name = "lang")
public String getLang() {
return lang;
}
@XmlElement(name = "text")
public String getText() {
return text;
}
public void setLang(String lang) {
this.lang = lang;
}
public void setText(String text) {
this.text = text;
}}
但是,一旦我手动将Xml更改为以下格式,文本值就会被抓取。
<Descriptions>
<description>
<lang> en</lang>
<text>This is English version </text>
</description>
<description>
<lang> fr</lang>
<text>This is French version </text>
</description>
</Descriptions>您有什么解决方案可以在不更改原始xml格式的情况下获取文本值?你能告诉我你的解决方案吗?
谢谢琳达
发布于 2021-12-21 21:46:58
您的Description与手动更改的XML匹配。这就是为什么它起作用了。
您已经声明了两个元素
// <lang>..</lang>
@XmlElement(name = "lang")
public String getLang() {
return lang;
}
//<text>..</text>
@XmlElement(name = "text")
public String getText() {
return text;
}但是,实际的<description>元素有一个属性lang=..和内部文本值,因此您应该按如下方式更改Description类。
// lang='..'
@XmlAttribute(name="lang")
public String getLang() {
return lang;
}
// inner text value e.g 'This is English version'
@XmlValue
public String getText() {
return text;
}https://stackoverflow.com/questions/70441425
复制相似问题