首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用JAXB解组时将空元素转换为null

JAXB(Java Architecture for XML Binding)允许您将Java对象与XML文档之间进行转换。当使用JAXB解组(unmarshalling)XML文档时,有时可能希望将空元素(empty elements)转换为Java对象中的null值。要实现这一目标,可以使用@XmlElement注解的nillable属性,并确保XML文档中的空元素具有xsi:nil="true"属性。

首先,定义一个Java类,该类将映射到XML文档的结构。在这个例子中,我们将创建一个Person类,其中包含firstNamemiddleName属性。

代码语言:javascript
复制
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "person")
public class Person {

    private String firstName;
    private String middleName;

    @XmlElement(nillable = true)
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @XmlElement(nillable = true)
    public String getMiddleName() {
        return middleName;
    }

    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }
}

注意@XmlElement(nillable = true)注解。这告诉JAXB允许将空元素映射为null值。

接下来,创建一个XML文档,其中包含空元素。为了表示空元素,我们在元素上添加了xsi:nil="true"属性。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <firstName>John</firstName>
   <middleName xsi:nil="true"/>
</person>

最后,使用JAXB解组XML文档:

代码语言:javascript
复制
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;

public class JAXBExample {

    public static void main(String[] args) {
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
               <person xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
                "   <firstName>John</firstName>\n" +
                "   <middleName xsi:nil=\"true\"/>\n" +
                "</person>";

        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            StringReader reader = new StringReader(xml);
            Person person = (Person) jaxbUnmarshaller.unmarshal(reader);

            System.out.println("First name: " + person.getFirstName());
            System.out.println("Middle name: " + person.getMiddleName()); // Should be null
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

运行此代码后,您将看到以下输出:

代码语言:javascript
复制
First name: John
Middle name: null

这表明空元素已成功转换为Java对象中的null值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券