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

我想解组具有混合内容的 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 {


@XmlMixed

public 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。


达令说
浏览 136回答 1
1回答

慕尼黑的夜晚无繁华

你可以试试这个:使用如下参考类,@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 的时间。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java