如何使用JAXB将空标记解组为标记元素的名称而不是其空字符串的值?

时间:2017-10-13 03:19:35

标签: java xml jaxb

我有一个输入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();
          }

    }
}

1 个答案:

答案 0 :(得分:0)

你必须定义另一个名为Material的类,并且在该类中需要定义金属和塑料