使用 JAXB 解析嵌套 XML 时出现的问题

我无法使用 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 文件的正确方法是什么?


临摹微笑
浏览 142回答 1
1回答

慕斯王

您的 POJO 应该更匹配您的行和列。我们创建了一个 Column 类(我选择了一个同时在 MyRow 和 MyColumns 中使用的类 - 两者都有属性)。@XmlAccessorType(XmlAccessType.FIELD)public class Column {&nbsp; &nbsp; @XmlAttribute&nbsp; &nbsp; private String type;&nbsp; &nbsp; @XmlAttribute&nbsp; &nbsp; private String index;&nbsp; &nbsp; @XmlValue&nbsp; &nbsp; private String value;}更改 MyColumns 以使用它:@XmlRootElement(name = "Columns")public class MyColumns {&nbsp; &nbsp; @XmlElement(name = "col")&nbsp; &nbsp; private List<Column> columns;}MyRow也是如此:@XmlRootElement(name = "row")@XmlAccessorType(XmlAccessType.FIELD)public class MyRow {&nbsp; &nbsp; @XmlAttribute&nbsp; &nbsp; private String index;&nbsp; &nbsp; @XmlElement(name = "col")&nbsp; &nbsp; private List<Column> columns;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java