相关文章推荐
豪情万千的麻辣香锅  ·  在Electron中最快速预加载脚本 - ...·  1 年前    · 
调皮的番茄  ·  python移动文件夹下所有文件-掘金·  1 年前    · 
纯真的保温杯  ·  2、Django入门介绍 - 知乎·  2 年前    · 
销魂的钥匙扣  ·  Xamarin表单,当手机被锁定时,前台服务不工作·  2 年前    · 
打篮球的荒野  ·  打假永远在路上,万顺叫车以零容忍态度打击刷单 ...·  2 年前    · 
Code  ›  使用Jackson XML为具有相同标记的多个元素使用XML创建JAVA对象开发者社区
string table xml语言
https://cloud.tencent.com/developer/ask/sof/106764903
大气的凳子
9 月前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 使用Jackson XML为具有相同标记的多个元素使用XML创建JAVA对象

Stack Overflow用户
提问于 2022-03-07 19:53:49
EN

我有以下XML结构,用于创建Java对象。

代码语言: javascript
复制
<TABLE NAME="AB" ID="10" CODE="ABC123" RANK="102" YEAR="2022"
       TIMESTAMP="2021-05-11-16.19.44.572000">
    <TABLE NAME="CD">
        <ROW CODE="BCD456" SERIAL="A" ORDER="1" DESCRIPTION_1="TEST1"
             DESCRIPTION_2="TEST2 19" DESCRIPTION_3="TEST 3" STATUS_CODE="496" STATUS_INDICATOR="J"
             PRODUCT_NAME="SHIP ">
            <TABLE NAME="CD1">
                <ROW CD1_CODE=" 11N" CD1_DESCRIPTION="T"/>
                <ROW CD1_CODE=" 2KA" CD1_DESCRIPTION="T"/>
            </TABLE>
            <TABLE NAME="CD2">
                <ROW CD2_CODE="11" CD2_DESCRIPTION="----"/>
                <ROW CD2_CODE="12" CD2_DESCRIPTION="----"/>
                <ROW CD2_CODE="35" CD2_DESCRIPTION="----"/>
            </TABLE>
            <TABLE NAME="CD3"/>
    </TABLE>
    <TABLE NAME="EF" CODE="EFG789">
        <ROW FILE="1" FILE_NAME="TEST.pdf" TIMESTAMP="2021-06-22T08:32:08.055854">
            <FILE_DATA>TESTDATA</FILE_DATA>
    </TABLE>
</TABLE>

我已经创建了一个XMLMapper,如下所示,它从Java检索值。对我来说,主要的问题是当我在同一个父元素下的XML中有多个 <TABLE> 元素时。

在第一个场景中, <TABLE NAME="AB"> 有两个子表 <TABLE NAME="CD"> 和 <TABLE NAME="EF"> 。

在第二个场景中, <TABLE NAME="CD"> 有三个子表 <TABLE NAME="CD1"> 、 <TABLE NAME="CD2"> 和 <TABLE NAME="CD3"> 以及后续的数据 <ROW> 。

我试图使用下面提供的XMLMapper代码以及相关的Java类来存储来自XML的相关数据。我能够为 <TABLE NAME = "CD1"> 及其子元素 <ROW> 验证存储在映射器中的数据

我已经尝试过在这个 post 中给出的答案,但是它并不完全适用于我的场景。

现在,我正在尝试从 <TABLE NAME = "CD2"> 和`中检索和存储元素。这就是我收到一个错误声明的地方

代码语言: javascript
复制
Multiple fields representing property "TABLE": createcsv.elements.CDRow#cd1Table vs createcsv.elements.CDRow#cd2Table

XMLMapperApp.java

代码语言: javascript
复制
public class XmlMapperApp {
    public static void main(String[] args) {
        try {
            File xmlFile = new File("./resource/test.xml").getAbsoluteFile();
            XmlMapper xmlMapper = new XmlMapper();
            xmlMapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
            EmployeeXML employeeXML = xmlMapper.readValue(xmlFile, EmployeeXML.class);
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
}

EmployeeXML.java

代码语言: javascript
复制
@AllArgsConstructor
@NoArgsConstructor
@JacksonXmlRootElement(localName = "TABLE")
public class EmployeeXML {
    @JacksonXmlProperty(isAttribute = true, localName = "NAME")
    private String name;
    @JacksonXmlProperty(isAttribute = true, localName =  "ID")
    private String id;
    @JacksonXmlProperty(isAttribute = true, localName = "CODE")
    private String code;
    @JacksonXmlProperty(isAttribute = true, localName = "RANK")
    private String rank;
    @JacksonXmlProperty(isAttribute = true, localName = "YEAR")
    private String year;
    @JacksonXmlProperty(isAttribute = true, localName =  "TIMESTAMP")
    private String timestamp;
    @JacksonXmlProperty(localName = "TABLE")
    private CDTable cdTable;
    @JacksonXmlProperty(localName = "TABLE")
    private EFTable efTable;
}

RowElement.java

代码语言: javascript
复制
public interface RowElement {
}

CDTable.java

代码语言: javascript
复制
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "TABLE")
public class CDTable {
    @JacksonXmlProperty(isAttribute = true, localName = "NAME")
    private String name;
    @JacksonXmlProperty(localName = "ROW")
    private CDRow cdRow;
}

CDRow.java

代码语言: javascript
复制
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "ROW")
public class CDRow implements RowElement {
    @JacksonXmlProperty(isAttribute = true, localName ="CODE")
    private String code;
    @JacksonXmlProperty(isAttribute = true, localName ="SERIAL")
    private String serial;
    @JacksonXmlProperty(isAttribute = true, localName ="ORDER")
    private String order;
    @JacksonXmlProperty(isAttribute = true, localName ="DESCRIPTION_1")
    private String benennung1;
    @JacksonXmlProperty(isAttribute = true, localName ="DESCRIPTION_2")
    private String benennung2;
    @JacksonXmlProperty(isAttribute = true, localName ="DESCRIPTION_3")
    private String benennung3;
    @JacksonXmlProperty(isAttribute = true, localName ="STATUS_CODE")
    private String statusCode;
    @JacksonXmlProperty(isAttribute = true, localName ="STATUS_INDICATOR")
    private String statusIndicator;
    @JacksonXmlProperty(isAttribute = true, localName ="PRODUCT_NAME")
    private String productName;
    @JacksonXmlProperty(localName = "TABLE")
    private CD1Table cd1Table;
    @JacksonXmlProperty(localName = "TABLE")
    private CD2Table cd2Table;
    @JacksonXmlProperty(localName = "TABLE")
    private CD3Table cd3Table;
}

CD1Table.java

代码语言: javascript
复制
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "TABLE")
public class CD1Table {
    @JacksonXmlProperty(isAttribute = true, localName = "NAME")
    private String name;
    @JacksonXmlProperty(localName = "ROW")
    private List<CDRow> cd1Row;
}

CD1Row.java

代码语言: javascript
复制
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "ROW")
public class CD1Row implements RowElement {
    @JacksonXmlProperty(isAttribute = true, localName ="CD1_CODE")
    private String cd1Code;
    @JacksonXmlProperty(isAttribute = true, localName ="CD1_DESCRIPTION")
    private String cd1Description;
}

CD2Table.java

代码语言: javascript
复制
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "TABLE")
public class CD2Table {
    @JacksonXmlProperty(isAttribute = true, localName = "NAME")
    private String name;
    @JacksonXmlProperty(localName = "ROW")
    private List<CD2Row> cd2Row;
}

CD2Row.java

代码语言: javascript
复制
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "ROW")
public class CD2Row implements RowElement {
    @JacksonXmlProperty(isAttribute = true, localName ="CD2_CODE")
    private String cd2Code;
    @JacksonXmlProperty(isAttribute = true, localName ="CD2_DESCRIPTION")
    private String cd2Description;
    @JacksonXmlProperty(localName = "TABLE")
    private CD3Table cd3Table;
}

CD3Table.java

代码语言: javascript
复制
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "TABLE")
public class CD3Table {
    @JacksonXmlProperty(isAttribute = true, localName = "NAME")
    private String name;
}

EFTable.java

代码语言: javascript
复制
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "TABLE")
public class EFTable {
    @JacksonXmlProperty(isAttribute = true, localName = "NAME")
    private String name;
    @JacksonXmlProperty(isAttribute = true, localName = "CODE")
    private String code;
    @JacksonXmlProperty(localName = "ROW")
    private EFRow efRow;
}

EFRow.java

代码语言: javascript
复制
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "ROW")
public class EFRow implements RowElement {
    @JacksonXmlProperty(isAttribute = true, localName ="FILE")
    private String file;
    @JacksonXmlProperty(isAttribute = true, localName ="FILE_NAME")
 
推荐文章
豪情万千的麻辣香锅  ·  在Electron中最快速预加载脚本 - 海角在眼前 - 博客园
1 年前
调皮的番茄  ·  python移动文件夹下所有文件-掘金
1 年前
纯真的保温杯  ·  2、Django入门介绍 - 知乎
2 年前
销魂的钥匙扣  ·  Xamarin表单,当手机被锁定时,前台服务不工作
2 年前
打篮球的荒野  ·  打假永远在路上,万顺叫车以零容忍态度打击刷单 - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号