2017-10-13 65 views
0

我有一個輸入XML文件,它使用空標記來表示有效的數據。我無法改變這一點。物品材料可以是由空標籤<metal/><plastic/>指定的「金屬」或「塑料」。 JAXB的問題在於它將空標籤解組爲空字符串。如何使用JAXB以便我可以提取<metal/><plastic/>作爲它們的xml標記名稱,字符串"metal""plastic"而不是它們的空值?如果沒有辦法使用JAXB來完成,我應該使用哪種解析器?如何使用JAXB將空標記解析爲標記元素的名稱而不是空字符串的值?

XML輸入文件

<items> 
    <item> 
     <id>item 1<id> 
     <material> 
      <metal/> 
     </material> 
    </item> 
    <item> 
     <id>item 2<id> 
     <material> 
      <plastic/> 
     </material> 
    </item> 
</items> 

Java bean類對應的Java對象。

@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; 
     } 

Controller類

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

我試過張貼問題,但該方法止跌」之前因爲在這種情況下,JAXB將視爲空標記。因此,它將Java類的字段設置爲空字符串。我試圖使用位置偵聽器,但是這種方法也不起作用。我結束了使用DOM解析器,它允許我解析出一個空標籤的名稱。 – AlexG

相關問題