jaxb解析字符串xml
尽管用于XML绑定的Java体系结构 ( JAXB )在名义情况下(尤其是自Java SE 6以来) 相当容易使用,但它也存在许多细微差别。 一些常见的细微差别是由于无法将 XML架构定义 (XSD)类型与Java 类型精确匹配 ( 绑定 )。 这篇文章看一个具体的例子,它还演示了当JAXB编译器生成Java类时,实施相同XML结构的不同XSD构造如何导致不同的Java类型。
下一个代码清单(用于Food.xsd
)定义了食物类型的架构。 XSD要求有效的XML将具有一个称为“食物”的根元素,并带有三个嵌套元素“蔬菜”,“水果”和“甜点”。 尽管用于指定“ Vegetable”和“ Dessert”元素的方法与用于指定“ Fruit”元素的方法不同,但是两种方法都导致相似的“有效XML”。 “ Vegetable”和“ Dessert”元素直接声明为稍后在XSD中定义的指定simpleType
的元素。 “水果”元素是通过引用( ref=
)定义到另一个包含simpleType
定义元素的。
Food.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:dustin="http://marxsoftware.blogspot.com/foodxml"
targetNamespace="http://marxsoftware.blogspot.com/foodxml"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="Food">
<xs:complexType>
<xs:sequence>
<xs:element name="Vegetable" type="dustin:Vegetable" />
<xs:element ref="dustin:Fruit" />
<xs:element name="Dessert" type="dustin:Dessert" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!--
Direct simple type that restricts xs:string will become enum in
JAXB-generated Java class.
-->
<xs:simpleType name="Vegetable">
<xs:restriction base="xs:string">
<xs:enumeration value="Carrot"/>
<xs:enumeration value="Squash"/>
<xs:enumeration value="Spinach"/>
<xs:enumeration value="Celery"/>
</xs:restriction>
</xs:simpleType>
<!--
Simple type that restricts xs:string but is wrapped in xs:element
(making it an Element rather than a SimpleType) will become Java
String in JAXB-generated Java class for Elements that reference it.