簡體   English   中英

使用JAXB解析嵌套XML時出現問題

[英]Issues while parsing nested XML using JAXB

我無法使用jaxB解析以下xml文件

<?xml version="1.0" encoding="utf-8"?>
<Root>
    <Status>1</Status>
    <StatusMessage/>
    <ResultSet>
        <Columns count="2">
            <col type="Decimal">COL1</col>
            <col type="String">COL2</col>
        </Columns>
        <Rows count="3">
            <row index="0">
                <col index="0">1</col>
                <col index="1">ABC</col>
            </row>
            <row index="1">
                <col index="0">2</col>
                <col index="1">DEF</col>
            </row>
            <row index="2">
                <col index="0">3</col>
                <col index="1">XYZ</col>
            </row>
        </Rows>
    </ResultSet>
</Root>

這是我編寫Java對象的方式

    @XmlRootElement(name = "Root")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Root{

          @XmlElement(name="Status") 
          private String status;

          @XmlElement(name="StatusMessage") 
          private String statusMessage;

          @XmlElement(name="ResultSet")
          private ResultSet resultSet;
    }

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="ResultSet")
public class ResultSet {

    @XmlElement(name = "Columns")
    MyColumns cols;

    @XmlElementWrapper(name="Rows")

    @XmlElement(name = "row")
    List<MyRow> all;
}

@XmlRootElement(name = "Columns")
public class MyColumns {

    @XmlElement(name = "col")
    private String columns1;

    @XmlElement(name = "col")
    private String columns2;
}

@XmlRootElement(name = "row")
@XmlAccessorType(XmlAccessType.FIELD)
public class MyRows {

    @XmlElement(name = "col")
    private String row1;

    @XmlElement(name = "col")
    private String row2;
}

解析時沒有任何異常,但MyRows和MyColumns中的數據為空。 我懷疑是MyRows中的XMLElement名稱。 對於這兩個變量,名稱均為“ col”。 因此,它可能無法正確映射數據。

解析此xml文件的正確方法是什么?

您的POJO應該更好地匹配您的行和列。 我們創建一個Column類(我選擇在MyRow和MyColumns中同時使用-具有這兩個屬性)。

@XmlAccessorType(XmlAccessType.FIELD)
public class Column {

    @XmlAttribute
    private String type;
    @XmlAttribute
    private String index;
    @XmlValue
    private String value;
}

更改MyColumns以使用它:

@XmlRootElement(name = "Columns")
public class MyColumns {

    @XmlElement(name = "col")
    private List<Column> columns;

}

對於MyRow同樣如此:

@XmlRootElement(name = "row")
@XmlAccessorType(XmlAccessType.FIELD)
public class MyRow {

    @XmlAttribute
    private String index;

    @XmlElement(name = "col")
    private List<Column> columns;
}

暫無
暫無

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

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