猿问

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


BIG阳
浏览 116回答 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

相关分类

Java
我要回答