如何使用JAXB處理XML中文本和“標簽混合的復雜結構?

使用JAXB處理xml中文本和標簽混合的復雜結構

本文介紹如何利用jaxb將Java對象映射到包含標簽和文本內容混合的復雜xml結構。目標xml結構如下:

<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”)無法處理標簽周圍的文本內容。 解決方法是使用@XmlMixed注解和@XmlElementRef注解。@XmlMixed表示屬性可以包含文本和XML元素,@XmlElementRef指定屬性可以包含BreakXbj類型的元素。

修改后的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結構,成功處理標簽及其周圍的文本內容。 XmlUtil類(用于XML轉換)的代碼未提供,但假設其功能正常。 注意,這里使用List存儲混合內容,需要根據實際情況進行類型處理。

如何使用JAXB處理XML中文本和“標簽混合的復雜結構?

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享