簡體   English   中英

如何使用JAXB將以下xml轉換為Java對象

[英]How do I convert the following xml into java objects using JAXB

將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是否適合這種情況。 任何想法,將不勝感激。

由於嵌套不是很深,因此您可以只具有Entity,Customer類,然后將這些注釋用於實體類中的映射:

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

參考: XmlElementWrapper

我認為,最好的方法是編寫一個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'bin'文件夾在您的路徑中。 生成的類將在與目標名稱空間相同名稱的文件夾中創建。

使用這些,您可以按照Naimish的示例JAXB Hello World示例中的說明進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM