我有像这样的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>
我该如何解决这个问题?谢谢。
答案 0 :(得分:1)
使用DataSet
类创建您的上下文。
JAXBContext jaxbcontext = JAXBContext.newInstance(DataSet.class);
也许您还需要添加Record
(不确定):
@XmlSeeAlso({Record.class})
public class DataSet {...}
但我认为即使没有它也可能有用。
或者你可以这样做:
JAXBContext jaxbcontext = JAXBContext.newInstance(DataSet.class, Record.class);
还有基于包名称的context path的其他替代方案。如果你手动编写类,那就不那么直截了当了。
答案 1 :(得分:0)
JAXBContext
DataSet
您需要在JAXBContext
课程上创建DataSet
。
JAXBContext jaxbcontext = JAXBContext.newInstance(DataSet.class);
然后,由于DataSet
类引用了Record
类,因此还会为Record
生成元数据。
JAXBContext
Record
在您的问题中,您在JAXBContext
上创建了Record
,因为记录未引用DataSet
没有为其创建元数据。如果您仍想在JAXBContext
上创建Record
,可以在@XmlSeeAlso
上添加类型级别Record
注释,以提取DataSet
类。