gpt4 book ai didi

java - JAXB 解码混合内容

转载 作者:行者123 更新时间:2023-12-01 17:42:19 25 4
gpt4 key购买 nike

我正在尝试解析 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>

我创建了以下类来解码这些数据。

根类

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

问题类别

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

我似乎无法将 Text HereMore Text 都存储在 Question 类中。

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

我正在打印上述代码片段的结果(将 Lombok 的 @ToString() 注释添加到 RootQuestion) XML_STRINGXML_STRING_2

XML_STRING:根(name=Michael,question=Question(questionText=此处的文本,measure=null))XML_STRING_2:根(name=Michael,question=Question(questionText=,measure=null))

最佳答案

通过在Question中使用@XmlMixed以及@XmlElementRefs并创建一个,我能够得到一些我可以使用的东西测量类。

@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 - JAXB 解码混合内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60931625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com