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

使用 Jaxb 解组 MixedContent 返回带有 null 变量的对象

使用 Jaxb 解组 MixedContent 返回带有 null 变量的对象

达令说 2023-08-16 09:44:29
我想解组具有混合内容的 XML 文件。其中用户 bdoughan 定义了 3 个用例来处理混合内容。第三个用例将标签之间的文本保留在单个字符串变量中,并将元素保存在列表中。这就是我想要的。不幸的是,我无法让它工作,而且该线程很旧,可能已经过时了。我已经尝试了用例#3 和对象列表以及我的参考类列表。我还尝试了@XmlElement 和@XmlValue 注释。我在 Java SE 版本 12.0.2 的 Maven Projec 中使用版本 2.3.1 中的 javax.xml.bind jaxb-api 和版本 2.3.1 中的 org.glassfish.jaxb jaxb-runtime。我测试过的示例 XML<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Date>    2018.06.27    <reference id="AnyId1">    </reference></Date>我的班级代表@XmlRootElement(name="Date")public class TestPojo {@XmlMixedpublic String getTextContent() {    return textContent;}public void setTextContent(String textContent) {    this.textContent = textContent;}@XmlElementRef(name="reference", type = Reference.class)public List<Object> getRef() {    return ref;}public void setRef(List<Object> ref) {    this.ref = ref;}String textContent;List<Object> ref = new ArrayList<Object>();}    我希望 xml 被解组到 POJO 对象中并分配正确的值。解组后,对象变量(textContent 和 ref)为 null。
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

你可以试试这个:


使用如下参考类,


@XmlAccessorType(XmlAccessType.FIELD)

public class Reference {

    @XmlAttribute

    private String id;

}

还有你的 Root 类,


@XmlRootElement(name="Date")

public class TestPojo {


    @XmlMixed

    @XmlAnyElement

    private List<Object> textContent;


    @XmlElement

    private Reference reference;


}

这将解组给您参考元素和列表中的其他所有内容。


对于您的示例,它将有 2 个条目。日期值/文本以及制表符 (\t) 和换行符 (\n),以及另一个带有换行符的条目。


所以你可以使用这个列表来处理内容并使用你想要的。


如果有更清洁的解决方案,我很感兴趣。干杯


更新回复评论:


为了更清楚地修复。我所做的是使用@XmlElement而不是@XmlElementRef单个引用而不是列表(因为这就是我在 xml 中看到的)。


我还添加了@XmlAnyElement混合内容的注释,使其成为一个列表。这就是修复它的原因。因此,坚持你的课程,它看起来像下面这样:


@XmlRootElement(name="Date")

public class TestPojo {


    List<Object> textContent;

    Reference ref;


    @XmlMixed

    @XmlAnyElement

    public List<Object> getTextContent() {

        return textContent;

    }


    public void setTextContent(List<Object> textContent) {

        this.textContent = textContent;

    }


    @XmlElement(name="reference")

    public Reference getRef() {

        return ref;

    }


    public void setRef(Reference ref) {

        this.ref = ref;

    }


}

@XmlAccessorType节省了我编写 getter 和 setter 的时间。


查看完整回答
反对 回复 2023-08-16
  • 1 回答
  • 0 关注
  • 134 浏览

添加回答

举报

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