簡體   English   中英

用JAXB讀取xml

[英]Reading xml with JAXB

我有這樣的XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data-set>
    <record>
        <TARIH>data</TARIH>
        <GUNLER>data</GUNLER>
        <YEMEK1>data</YEMEK1>
        <YEMEK2>data</YEMEK2>       
    </record>
    <record>
        <TARIH>data</TARIH>
        <GUNLER>data</GUNLER>
        <YEMEK1>data</YEMEK1>
        <YEMEK2>data</YEMEK2>   
    </record>
</data-set>

我想用Java中的JAXB解析它。 這是我的DataSet類。

@XmlRootElement(name="data-set")
@XmlAccessorType(XmlAccessType.FIELD)
public class DataSet {
    @XmlElement(name="record")
    private List<Record> records = null;
    public List<Record> getRecords(){
        return records;
    }

    public void setRecords(List<Record> records){
        this.records = records;
    }
}

這是我的記錄課。

@XmlRootElement(name="record")
@XmlAccessorType(XmlAccessType.FIELD)
public class Record {
    String TARIH,GUNLER,YEMEK1,ANAYEMEK1,ANAYEMEK2,YEMEK3,YEMEK4,SALATBAR1,SALATBAR2,SALATBAR3,SALATBAR4,SALATBAR5;

    //getters and setters//

我嘗試這樣的事情。

public class Main {
    public static void main(String[] args) throws JAXBException {
        File file = new File("C:/Users/EMRE/Desktop/YEMEKHANE DATABASE/morning.xml");
        JAXBContext jaxbcontext = JAXBContext.newInstance(Record.class);
        Unmarshaller jaxbunmarshaller = jaxbcontext.createUnmarshaller();
        Record record = (Record)jaxbunmarshaller.unmarshal(file);

        System.out.println(record.getTARIH());
    }
}   

我遇到這樣的錯誤。

Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"data-set"). Expected elements are <{}record>

我怎樣才能解決這個問題? 謝謝。

使用DataSet類創建上下文。

JAXBContext jaxbcontext = JAXBContext.newInstance(DataSet.class);

也許您還需要添加Record (不確定):

@XmlSeeAlso({Record.class})
public class DataSet {...}

但是我認為即使沒有它也可能會起作用。

或者,您可以執行以下操作:

JAXBContext jaxbcontext = JAXBContext.newInstance(DataSet.class, Record.class);

還有其他一些基於包名稱的上下文路徑的替代方法。 如果您手動編寫類,不是那么簡單。

DataSet上創建JAXBContext

您需要在DataSet類上創建JAXBContext

    JAXBContext jaxbcontext = JAXBContext.newInstance(DataSet.class);

然后,由於DataSet類引用了Record類,因此還將為Record生成元數據。

如果要在Record上創建JAXBContext

在您的問題中,您創建了Record上的JAXBContext ,因為記錄未引用DataSet沒有為其創建任何元數據。 如果您仍然希望創建JAXBContextRecord您可以添加一個類型級別@XmlSeeAlso上標注Record在拉DataSet類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM