Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用@XmlElement和@XmlRootElement在对象内部编组对象?_Java_Xml_Jaxb - Fatal编程技术网

Java 如何使用@XmlElement和@XmlRootElement在对象内部编组对象?

Java 如何使用@XmlElement和@XmlRootElement在对象内部编组对象?,java,xml,jaxb,Java,Xml,Jaxb,我见过许多JAXB实现,在这些实现中,我们可以使用@xmlement注释将java原语转换为XML元素 但是,我想将以下POJO转换为XML(注意,employee类中有一个地址对象,而不仅仅是原语): 如何使用这些JAXB注释将employee对象整理成XML 谢谢。使用Jaxb,您可以尝试以下代码。或者你也可以试试 ======================== @XmlRootElement public class TestObject1 { String b; p

我见过许多JAXB实现,在这些实现中,我们可以使用
@xmlement
注释将java原语转换为XML元素

但是,我想将以下POJO转换为XML(注意,employee类中有一个地址对象,而不仅仅是原语):

如何使用这些JAXB注释将employee对象整理成XML


谢谢。

使用Jaxb,您可以尝试以下代码。或者你也可以试试

========================

@XmlRootElement
public class TestObject1 {

    String b;

    public String getB() {
        return b;
    }

    @XmlElement
    public void setB(String b) {
        this.b = b;
    }

}
通过遵循下面给出的方法(即通过
@XmlRootElement
注释来注释这两个类),我能够使用JAXB实现“对象内部对象”XML编组:


封送POJO属性与封送基元属性没有什么不同。引用的POJO类不需要用
@XmlRootElement
注释

Java模型 员工

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Employee {

    private Address address;
    private int employeeId;

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public int getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(int employeeId) {
        this.employeeId = employeeId;
    }

}
import javax.xml.bind.annotation.*;

@XmlRootElement
public class Employee {

    private Address address;
    private int employeeId;

    @XmlElement(name="ADDR")
    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @XmlElement(name="ID")
    public int getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(int employeeId) {
        this.employeeId = employeeId;
    }

}
地址

要将
地址
编组为
员工
的一部分,您不需要做什么特殊的事情

public class Address {

    private String street;

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

}
演示代码 下面是一些演示代码,它将填充员工模型并将其封送到XML

演示

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Employee.class);

        Address address = new Address();
        address.setStreet("1 A Street");

        Employee employee = new Employee();
        employee.setEmployeeId(123);
        employee.setAddress(address);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(employee, System.out);
    }

}
输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
    <address>
        <street>1 A Street</street>
    </address>
    <employeeId>123</employeeId>
</employee>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
    <ADDR>
        <street>1 A Street</street>
    </ADDR>
    <ID>123</ID>
</employee>
输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
    <address>
        <street>1 A Street</street>
    </address>
    <employeeId>123</employeeId>
</employee>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
    <ADDR>
        <street>1 A Street</street>
    </ADDR>
    <ID>123</ID>
</employee>

一条街
123

但我没有“字符串”,而是要编组“地址”对象!如何进行注释?将@XmlElement注释放在getXXX方法上?不放在字段上?@B尽管这是一个非常有用的答案,非常感谢!!
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
    <ADDR>
        <street>1 A Street</street>
    </ADDR>
    <ID>123</ID>
</employee>