使用JAXB處理xml中文本和標簽混合的復雜結構
本文介紹如何利用jaxb將Java對象映射到包含
<speak> <voice name="zh-cn-yunxineural">我是 <break time="1000ms"></break>張三 </voice> <voice name="zh-cn-xiaoxiaoneural">他是 <break time="100ms"></break>李四 </voice> </speak>
直接使用@XmlElement(name = “break”)無法處理
修改后的VoiceXbj類如下:
@Data @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "voice") public class VoiceXbj { @XmlAttribute private String name; @XmlMixed @XmlElementRef(type = BreakXbj.class) private List<Object> content; }
BreakXbj類保持不變:
@Data @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "break") public class BreakXbj { @XmlAttribute private String time; }
測試代碼需要將文本內容和BreakXbj對象添加到VoiceXbj類的content列表中:
@Slf4j public class SsmlTest { @Test public void test1() { SpeakXbj xbj = new SpeakXbj(); List<VoiceXbj> voiceList = new ArrayList<>(); // ... (代碼與原文類似,創建VoiceXbj對象,添加文本和BreakXbj對象到content列表) ... xbj.setVoice(voiceList); System.out.println(XmlUtil.convertToXml(xbj)); } }
通過@XmlMixed和@XmlElementRef,JAXB能夠正確映射Java對象到目標XML結構,成功處理
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END