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 Here
和 More Text
都存储在 Question
class.
中
JAXBContext.newInstance(Root.class)
.createUnmarshaller()
.unmarshal(new ByteArrayInputStream(XML_STRING_2.getBytes("UTF-8")));
我正在为 XML_STRING
和 [=22 打印上述代码片段的结果(将 Lombok 的 @ToString()
注释添加到 Root
和 Question
) =].
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)]))
根文件保持不变。
我正在尝试为 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 Here
和 More Text
都存储在 Question
class.
JAXBContext.newInstance(Root.class)
.createUnmarshaller()
.unmarshal(new ByteArrayInputStream(XML_STRING_2.getBytes("UTF-8")));
我正在为 XML_STRING
和 [=22 打印上述代码片段的结果(将 Lombok 的 @ToString()
注释添加到 Root
和 Question
) =].
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)]))
根文件保持不变。