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

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

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

临摹微笑 2022-08-03 15:50:46
我无法使用 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贡献1864条经验 获得超2个赞

您的 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-08-03
  • 1 回答
  • 0 关注
  • 141 浏览

添加回答

举报

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