如何使用JAXB处理XML中混合文本和标签?

利用JAXB处理XML中混合文本和标签:标签的巧妙应用

本文将详细讲解如何使用JAXB将Java对象映射到包含标签及其周边文本的复杂XML结构。目标XML结构如下所示:


  我是
    张三
  
  他是
    李四
  

最初尝试使用@XmlElement注解处理标签及其邻近文本,但由于标签与文本混合出现,导致映射失败。 解决方法是结合使用@XmlMixed@XmlElementRef注解来处理混合内容。

改进后的VoiceXbj类如下:

@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "voice")
public class VoiceXbj {

    @XmlAttribute
    private String name;

    @XmlMixed
    @XmlElementRef(type = BreakXbj.class)
    private List content;

}

@XmlMixed注解声明content属性可以包含文本和其它XML元素。@XmlElementRef注解指定content列表中可以包含BreakXbj类型的对象。

BreakXbj类保持不变:

@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "break")
public class BreakXbj {

    @XmlAttribute
    private String time;
}

测试方法中,需将文本和BreakXbj对象添加到content列表:

@Slf4j
public class SsmlTest {

    @Test
    publi

c void test1() { SpeakXbj xbj = new SpeakXbj(); List voiceList = new ArrayList<>(); // ... (代码与原文相同,略去重复部分) ... System.out.println(XmlUtil.convertToXml(xbj)); } }

通过以上修改,JAXB可以正确地将Java对象映射到包含标签及其邻近文本的XML结构。 XmlUtil类和SpeakXbj类保持不变,最终生成的XML结构与预期一致。