如何使用JAXB将以下xml转换为java对象

时间:2015-08-05 20:18:37

标签: java xml jaxb jaxb2

将此XML转换为Java对象的最佳方法是什么?

<entity>         
    <customers id=2 other="data">
        <customer name="john">testData1</customer>
        <customer name="jenny">testData2</customer>
        <customer name="joe">testData3</customer>
        <customer name="joanna">testData4</customer>
    </customers>
</entity>

最好使用带有HashMap的自定义XMLAdapter来转换<customer>的多个xml行吗?我不确定XMLAdapter是否适用于此场景。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:0)

由于嵌套不是很深,你可以只使用Entity,Customer类,然后将这些注释用于实体类中的映射:

@XmlElementWrapper(name="customers")
@XmlElement(name="customer")
public void setCustomers(List<Customer> customers) {
    this.customers= customers;
}

参考文献: XmlElementWrapper

答案 1 :(得分:0)

在我看来,最佳方法是编写一个xsd文件来验证你的xml。您可以使用它与使用Java捆绑的xjc生成Java类。这应该可以帮助你。

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:NameOfNamespace="http://enter.your.namespace.here"
        targetNamespace="http://enter.your.namespace.here"
        attributeFormDefault="unqualified"
        elementFormDefault="qualified">

    <complexType name="customer">
        <simpleContent>
            <extension base="string">
                <attribute name="name"/>
            </extension>
        </simpleContent>
    </complexType>

    <complexType name="customers">
        <sequence>
            <element name="customer" type="NameOfNamespace:customer"/>
        </sequence>
        <attribute name="id" type="positiveInteger"/>
        <attribute name="other"/>
    </complexType>

    <complexType name="entity" >
        <sequence>
            <element name="customers" type="NameOfNamespace:customers" minOccurs="1" maxOccurs="1"/>
        </sequence>
    </complexType>

    <element name="entity" type="NameOfNamespace:entity"/>
</schema>

打开命令提示符到您放置xsd文件的文件夹,然后生成您只需输入的java代码:

$ xjc nameOfSchemaFile.xsd

假设你的java&#39; bin&#39;文件夹在你的路径中。生成的类将在与targetNamespace同名的文件夹中创建。

使用这些,您可以按照Naimish的示例JAXB Hello World Example

中的说明进行操作