簡體   English   中英

JAXB解組XML,在子元素中具有父元素

[英]JAXB unmarshal XML with a parent element in a child element

我已經四處尋找和搜尋,但找不到我的問題的答案。 我有一個具有以下結構的XML文件:

<!DOCTYPE persons [
    <!ELEMENT lastname (#PCDATA)>
    <!ELEMENT firstname (#PCDATA)>
    <!ELEMENT residence (#PCDATA)>
    <!ELEMENT children (person*)>
    <!ELEMENT person (firstname, (lastname?), (children?), (residence?))>
    <!ELEMENT persons (person+)>
    <!ATTLIST person id ID #REQUIRED>
    <!ATTLIST person friends IDREFS #IMPLIED>
    <!ATTLIST persons file CDATA #IMPLIED>
    ]>

<persons file="this">
    <person id="p-1">
        <firstname>Homer</firstname>
        <lastname>Simpson</lastname>
        <residence>Springfield</residence>
        <children>
            <person id="p-3">
                <firstname>Bart</firstname>
                <residence>Springfield</residence>
            </person>
        </children>
    </person>
    <person id="p-2" friends="p-1">
        <firstname>Ned</firstname>
        <lastname>Flanders</lastname>
        <residence>Springfield</residence>
    </person>
</persons>

我的Java文件如下:

人員.java

@XmlRootElement(name="persons")
public class Persons {

    @XmlAttribute(name="file")  
    private String file;
    @XmlElement(name="person")
    private List<Person> persons;

    /* setters and getters */
}

人.java

public class Person {

    @XmlAttribute(name="id")
    private String id;
    @XmlAttribute(name="friends")
    private String friends;
    private String firstname;
    private String lastname;
    private String residence;
    private List<Children> children;

    /* getters and setters */
}

Children.java

public class Children {

    private List<Person> persons;

    /* getters and setters */
}

注意:我在對象變量上使用了注釋,因為我不想寫下getter和setter。 我知道,否則@XmlAccessorType(XmlAccessType.FIELD)是必需的。

因此, <children>實際上可以有一個或多個<person>作為孩子。 我想我對不同的列表感到困惑。 當我通過使用簡單的System.out.println()命令對每個人解組給定的XML文件來簡單地測試它時,我看到每個元素和屬性都具有正確的值,但是person.getChildren()始終返回null。 我做錯了什么?

在您的兒童班上,您忘記添加

@XmlElement(name="person")

進入兒童班的人員名單。 所以它應該看起來像這樣:

public class Children {

    private List<Person> persons;

    public List<Person> getPersons() {
        return persons;
    }

    @XmlElement(name="person") // MISSING ANNOTATION
    public void setPersons(List<Person> persons) {
        this.persons = persons;
    }
}

添加后,我的輸出是:

Persons = [
    file: this, 
    persons: [
        Person = [
            id=p-1, 
            freinds=null, 
            firstName=Homer, 
            lastName=Simpson, 
            residence=Springfield, 
            children=[
                Children = [
                    persons=[
                        Person = [
                            id=p-3, 
                            freinds=null, 
                            firstName=Bart, 
                            lastName=null, 
                            residence=Springfield, 
                            children=null
                        ]
                    ]
                ]
            ]
        ], 
        Person = [
            id=p-2, 
            freinds=p-1, 
            firstName=Ned, 
            lastName=Flanders, 
            residence=Springfield, 
            children=null
        ]
    ]
]

暫無
暫無

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

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