JAXB 解组混合内容

JAXB unmarshall Mixed Content

我正在尝试为 java 应用程序解析现有的 XML 文件,并且某些元素偶尔包含混合内容,如下所示:

XML_STRING

<root>
  <name>Michael</name>
  <question>Text here</question>
</root>

XML_STRING_2

<root>
  <name>Michael</name>
  <question>Text here<measure>More Text</measure></question>
</root>

我做了以下 classes 来解组这些数据。

根目录Class

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root implements Serializable
{
    private String name;
    private Question question;
}

问题Class

@XmlAccessorType(XmlAccessType.NONE)
public class Question implements Serializable
{
    @XmlValue
    private String questionText;
    private String measure;
}

我似乎无法将 Text HereMore Text 都存储在 Question class.

JAXBContext.newInstance(Root.class)
  .createUnmarshaller()
  .unmarshal(new ByteArrayInputStream(XML_STRING_2.getBytes("UTF-8")));

我正在为 XML_STRING 和 [=22 打印上述代码片段的结果(将 Lombok 的 @ToString() 注释添加到 RootQuestion) =].

XML_STRING: Root(name=Michael, question=Question(questionText=Text here, measure=null)) XML_STRING_2:Root(name=Michael, question=Question(questionText=, measure=null))

通过在 Question 中使用 @XmlMixed@XmlElementRefs 并创建 Measure class,我能够得到一些我可以使用的东西。 =18=]

@XmlAccessorType(XmlAccessType.NONE)
public class Question implements Serializable
{
    @XmlMixed
    @XmlElementRefs({
        @XmlElementRef(name = "measure", type=Measure.class)
    })
    private List<?> content;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="measure") // If this is removed I get the error: "Invalid @XmlElementRef : Type `Measure` or any of its subclasses are not known to this context."
public class Measure
{
    @XmlValue
    private String value;
}

我现在得到以下输出,我可以通过 instanceof 检查里面的项目来使用它 content

Root(name=Michael, question=Question(content=[Text here]))
Root(name=Michael, question=Question(content=[Text here, Measure(value=More Text)]))

根文件保持不变。