使用 jaxb 从 xml 元素列表中提取值
Extract value from list of xml elements with jaxb
我有一份 XML 文档结构如下
<thing>
<attr name="one">first</attr>
<attr name="two">second</attr>
<attr name="three">third</attr>
</thing>
我的 JAXB 类 是这样设置的:
public class Thing {
List<Attribute> attr = new ArrayList<Attribute>();
@XmlElement(name="attr")
public List<Attribute> getAttr() { return this.attr; }
public void setAttr(List<Attribute> attr) { this.attr = attr; }
}
public class Attribute {
String value;
String name;
@XmlAttribute
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
@XmlElement
public String getValue() { return this.value;}
public void setValue(String value) { this.value = value; }
}
当我解组文档时,如果我循环 for (Attribute a : thing.getAttr())
执行 a.getName()
它会打印 "one"、"two"、"three" 但 a.getValue()
只是空值。
我是不是注释错了?即使我将注释设置为 @XmlElement(name="attr")
,它似乎也做同样的事情。
这将解决您的问题:
@XmlValue
public String getValue() { return this.value;}
这不是子元素,而是您要查找的当前元素值。
编辑: 顺便说一句,你应该在 Thing class 上添加一个 @XmlRootElement
注释,以防它丢失。
我有一份 XML 文档结构如下
<thing>
<attr name="one">first</attr>
<attr name="two">second</attr>
<attr name="three">third</attr>
</thing>
我的 JAXB 类 是这样设置的:
public class Thing {
List<Attribute> attr = new ArrayList<Attribute>();
@XmlElement(name="attr")
public List<Attribute> getAttr() { return this.attr; }
public void setAttr(List<Attribute> attr) { this.attr = attr; }
}
public class Attribute {
String value;
String name;
@XmlAttribute
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
@XmlElement
public String getValue() { return this.value;}
public void setValue(String value) { this.value = value; }
}
当我解组文档时,如果我循环 for (Attribute a : thing.getAttr())
执行 a.getName()
它会打印 "one"、"two"、"three" 但 a.getValue()
只是空值。
我是不是注释错了?即使我将注释设置为 @XmlElement(name="attr")
,它似乎也做同样的事情。
这将解决您的问题:
@XmlValue
public String getValue() { return this.value;}
这不是子元素,而是您要查找的当前元素值。
编辑: 顺便说一句,你应该在 Thing class 上添加一个 @XmlRootElement
注释,以防它丢失。