Java JAXB@XMLIDREF和@XMLID的使用

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> &

我想用Java用XML保存数据

XML应该如下所示:

<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是什么样子的完整示例(包括根元素)我添加了一个类,该类包含所有数据,现在可以工作了,谢谢您的帮助