我有一个输入XML文件,它使用空标记来表示有效数据。我无法改变这一点。物品材料可以是&#34;金属&#34;或&#34;塑料&#34;由空标记<metal/>
和<plastic/>
指定。 JAXB的问题在于它将空标记解组为空字符串。我如何使用JAXB,以便我可以提取<metal/>
和<plastic/>
作为其xml标记名称,字符串"metal"
和"plastic"
而不是它们的空值?如果使用JAXB无法做到这一点,我应该使用什么解析器?
XML输入文件
<items>
<item>
<id>item 1<id>
<material>
<metal/>
</material>
</item>
<item>
<id>item 2<id>
<material>
<plastic/>
</material>
</item>
</items>
相应Java对象的Java bean类。
@XmlRootElement(name = "items")
public class Items{
private List<Item> items;
public List<Item> getItems() {
return items;
}
@XmlElement(name = "item")
public void setItes(List<Item> items) {
this.items= items;
}
public static class Item{
private String id;
private String material;
public String getId() {
return id;
}
@XmlElement(name = "id")
public void setId(String id) {
this.id = id;
}
public String getMaterial() {
return material;
}
@XmlElement
public void setMaterial(String material) {
this.material = material;
}
控制器类
public class ItemParser {
public static void main(String[] args) {
// System.out.println("Hello World!");
try {
File file = new File("I:\\items.xml");
JAXBContext jaxbContext = JAXBContext.newInstance( Items.class );
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Items items = (Items) jaxbUnmarshaller.unmarshal( file );
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
你必须定义另一个名为Material的类,并且在该类中需要定义金属和塑料