亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 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 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號