为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

BIG阳 2022-07-27 21:57:07
我无法使用 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 文件的正确方法是什么?
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

您的 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;

}


查看完整回答
反对 回复 2022-07-27
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信