使用JAXB,如何避免将JAXBElement用于混合complexType

问题描述

当在XSD中用complex =“ true”标记complexType时,生成java类生成一个列表,该列表具有围绕实际值的“字符串”类型或JAXBElement包装器。如果没有mixed =“ true”,那么将不会生成JAXBElement,并且该值将直接映射到类型类。例如:

    <xs:complexType name="div" mixed="true">
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:element name="a" minOccurs="0" maxOccurs="unbounded" type="anchorType"/>
     </xs:sequence>
     ...
   </complexType>

此处div类型将包含一个List getContent()方法,该方法返回AnchorType的String或JAXBElement。

我希望它只返回String或AnchorType而不返回JAXBElement。

解决方法

考虑以下XML,其中包含div标签和一些子标签:

df1 <- structure(list(S1 = c(NA,NA,1L,2L,NA),S2 = c(NA,3L,S3 = c(NA,3L),S4 = c(NA,5L,4L,S5 = c(NA,7L,NA)),class = "data.frame",row.names = c("1","2","3","4","5","6","7"))

但是XML文档中的混合内容不一定在单个块中出现。 根据XSD,此XML也有效:

<parentTag>
  <div>myPlainTextValue<a/><a/></div>
</parentTag>

在两种情况下,标记“ div”的文本内容均为“ myPlainTextValue”。但是在第二个示例中,它以4个较小的块分布在子标记之间。 JAXB需要生成可以处理 general 案例的代码,因此我不希望它具有适合您案例的特殊模式。