Проблемы при разборе вложенного XML с использованием JAXB - PullRequest
1 голос
/ 12 марта 2019

Я не могу проанализировать следующий XML-файл, используя jaxB

<?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 имеют нулевое значение.я подозреваю, что это имя XMLElement в MyRows.Для обеих переменных имя "col".из-за чего он может быть не в состоянии правильно отобразить данные.

Что может быть правильным способом для анализа этого файла XML?

1 Ответ

0 голосов
/ 12 марта 2019

Ваши 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;
}
...