gpt4 book ai didi

java - JAXB 能否将基类型用于未知类型的已知元素?

转载 作者:行者123 更新时间:2023-11-30 09:46:07 26 4
gpt4 key购买 nike

给定一个像这样的 XSD:

<!-- ... -->
<xsd:element name="MyElement" type="ParentType" />
<!-- ... -->
<xsd:complexType name="ParentType">
<xsd:sequence>
<!-- ... -->
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ChildType1">
<xsd:complexContent>
<xsd:extension base="ParentType">
<xsd:sequence>
<!-- ... -->
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<!-- ... -->

当 JAXB2 必须解码包含未知类型元素的 XML 时,是否可以将 JAXB2 配置为回退到基本类型 ParentType,如下例所示:

<!-- ... -->
<MyElement xsi:type="ChildType2">
<!-- ... -->
</MyElement>
<!-- ... -->

通常,在这种情况下,JAXB 会抛出一个异常,指出 ChildType2 是无法识别的类型。

最佳答案

这不是您所需要的,但您可以使用 @XmlAnyElement将未知类型解码为 DOM 元素。

考虑一个 Customer 类,其 extras 字段用包罗万象的 @XmlAnyElement 注释。

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
@XmlElement
private String name;
@XmlAnyElement
private List<Element> extras = new ArrayList<Element>();

public String getName() {
return name;
}

public List<Element> getExtras() {
return extras;
}
}

示例 xml:

<?xml version="1.0" encoding="UTF-8"?>
<customer>
<name>John Doe</name>
<salary>1000</salary>
<age>45</age>
</customer>

SalaryAge 是未知类型,在我们解码时存储在我们的 extras 列表中:

JAXBContext jc = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Customer customer = (Customer) unmarshaller.unmarshal(reader);
System.out.println(customer.getName());
for (Element el : customer.getExtras()) {
System.out.println(el.getNodeName() + "->"
+ el.getTextContent());

输出:

John Doe
salary->1000
age->45

关于java - JAXB 能否将基类型用于未知类型的已知元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7286390/

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