Java JAXB@XMLIDREF和@XMLID的使用
我想用Java用XML保存数据 XML应该如下所示:Java JAXB@XMLIDREF和@XMLID的使用,java,xml,jaxb,Java,Xml,Jaxb,我想用Java用XML保存数据 XML应该如下所示: <person> <id>101</id> <name>test name</name> </person> <person> <id>202</id> <name>another name</name> </person> <company> &
<person>
<id>101</id>
<name>test name</name>
</person>
<person>
<id>202</id>
<name>another name</name>
</person>
<company>
<bureau1>
<id>101</id>
<id>202</id>
</bureau1>
<bureau2>
<id>202</id>
</bureau2>
<company>
101
测试名称
202
另一个名字
101
202
202
如何使用JAXB实现这一点。如果我尝试过,我会得到公司的部分,但是
我无法导出人员数据。我在寻找解决办法
是的,下面是一个类和XML的示例。但是这些人的信息在哪里呢
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Company {
private String companyNo;
private String name;
@XmlElementWrapper(name="employee")
@XmlElement(name="person")
@XmlIDREF
private List<Person> employee;
}
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
@XmlID
private String pId;
private String name;
}
public class CompanyExport {
public static void main(String[] args) throws FileNotFoundException, IOException {
List<Person> employee = new ArrayList<Person>();
Person p1 = new Person();
p1.setName("Name1");
p1.setPId("p101");
employee.add(p1);
Person p2 = new Person();
p2.setName("Name2");
p2.setPId("p202");
employee.add(p2);
Person p3 = new Person();
p3.setName("Name3");
p3.setPId("p303");
employee.add(p3);
Company c = new Company();
c.setEmployee(employee);
c.setCompanyNo("c101");
c.setName("JAXB Company1");
try (FileOutputStream ausgabe = new FileOutputStream(new File("CompanyExport.xml"))){
JAXBContext context = JAXBContext.newInstance(Company.class);
Marshaller jMarshall = context.createMarshaller();
jMarshall.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jMarshall.marshal(c, ausgabe);
System.out.println("DONE!");
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//} catch (SAXException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
}
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<company>
<companyNo>c101</companyNo>
<name>JAXB Company1</name>
<employee>
<person>p101</person>
<person>p202</person>
<person>p303</person>
</employee>
</company>
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
公营公司{
私有字符串公司no;
私有字符串名称;
@xmlementwrapper(name=“employee”)
@xmlement(name=“person”)
@XmlIDREF
私人名单雇员;
}
@XmlAccessorType(XmlAccessType.FIELD)
公共阶层人士{
@XmlID
私有字符串pId;
私有字符串名称;
}
公共类公司出口{
公共静态void main(字符串[]args)抛出FileNotFoundException、IOException{
List employee=new ArrayList();
人员p1=新人员();
p1.设置名称(“名称1”);
p1.设定PID(“p101”);
添加(p1);
人员p2=新人员();
p2.设置名称(“名称2”);
p2.设定PID(“p202”);
添加(p2);
人员p3=新人员();
p3.设置名称(“名称3”);
p3.设定PID(“p303”);
添加(p3);
公司c=新公司();
c、 setEmployee(雇员);
c、 setCompanyNo(“c101”);
c、 setName(“JAXB公司1”);
try(FileOutputStream ausgabe=newfileoutputstream(新文件(“CompanyExport.xml”)){
JAXBContext context=JAXBContext.newInstance(Company.class);
Marshaller jMarshall=context.createMarshaller();
setProperty(Marshaller.JAXB_格式化的_输出,true);
元帅(c,ausgabe);
System.out.println(“完成!”);
}捕获(JAXBEException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
//}捕获(SAXE异常){
////TODO自动生成的捕捉块
//e.printStackTrace();
}
}
c101
JAXB公司1
p101
p202
p303
您是否有任何试图向我们展示的代码?请看下面的示例:下面是一个应该有帮助的示例:请提供您希望xml是什么样子的完整示例(包括根元素)我添加了一个类,该类包含所有数据,现在可以工作了,谢谢您的帮助