本文闡述如何利用JAXB庫將Java對象映射到包含混合內(nèi)容(文本和xml元素)的復(fù)雜XML結(jié)構(gòu)。目標(biāo)XML結(jié)構(gòu)如下:
<speak><voice name="zh-cn-yunxineural">我是 <break time="1000ms"></break>張三 </voice><voice name="zh-cn-xiaoxiaoneural">他是 <break time="100ms"></break>李四 </voice></speak>
直接使用JAXB映射此結(jié)構(gòu)時,break標(biāo)簽周圍的文本處理會遇到問題。為了解決這個問題,需要改進Java對象的定義。
原代碼中,VoiceXbj類試圖將
修改后的VoiceXbj和BreakXbj類代碼如下:
立即學(xué)習(xí)“Java免費學(xué)習(xí)筆記(深入)”;
@Data @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "voice") public class VoiceXbj { @XmlAttribute private String name; @XmlMixed @XmlElementRef(type = BreakXbj.class) private List<Object> content; } @Data @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "break") public class BreakXbj { @XmlAttribute private String time; }
在SsmlTest類中,我們創(chuàng)建VoiceXbj對象,并將文本和BreakXbj對象添加到content列表中。這樣,JAXB就能正確地將文本和
修改后的SsmlTest類test1方法代碼如下:
@Slf4j public class SsmlTest { @Test public void test1() { SpeakXbj xbj = new SpeakXbj(); List<VoiceXbj> voiceList = new ArrayList<>(); // ... (創(chuàng)建VoiceXbj對象和BreakXbj對象,并添加到列表中,代碼與原文相同) ... xbj.setVoice(voiceList); System.out.println(XmlUtil.convertToXml(xbj)); } }
通過這些修改,生成的XML結(jié)構(gòu)將準(zhǔn)確包含文本和
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END