使用JAXB从一个对象模型中产生XML文档
【IT168技术文档】
Unmarshal和产生Schema
如图1所示,JAXB可以用来unmarshal,产生和编译一个schema,也就是用先前获得的XML文档来产生对象图表。首先得到一个JAXBContext,创建一个Unmarshaller对象,调用unmarshal方法,然后返回Individual的属性及他的一个实例:
一个XML schema描述了XML文档的结构,用XML语法来写的。如果你对XML schema了解的不多,你也可以使用Sun的JAXB实现提供的schemaGen工具来产生一个XML schema。如Listing 3,可以看到Address, Company, Individual和 Tag类被描述为复杂的类型:// xmlString contains the XML document of an individual
StringReader reader = new StringReader(xmlString);
JAXBContext context = JAXBContext.newInstance(Individual.class);
Unmarshaller u = context.createUnmarshaller();
Individual individual = (Individual) u.unmarshal(reader);
![]()
System.out.println(individual.getFirstname());
如果下载JAXB,schema编译器(xjc)也会被一同下载。<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
![]()
<xs:complexType name="address">
<xs:sequence>
<xs:element name="street" type="xs:string" minOccurs="0"/>
<xs:element name="zip" type="xs:string" minOccurs="0"/>
<xs:element name="city" type="xs:string" minOccurs="0"/>
<xs:element name="country" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
![]()
<xs:complexType name="company">
<xs:sequence>
<xs:element name="contactName" type="xs:string" minOccurs="0"/>
<xs:element name="telephone" type="xs:string" minOccurs="0"/>
<xs:element name="email" type="xs:string" minOccurs="0"/>
<xs:element name="numberOfEmployees" type="xs:int" minOccurs="0"/>
<xs:element name="homeAddress" type="address" minOccurs="0"/>
<xs:element name="delivery" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="address" type="address" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:long"/>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
![]()
<xs:complexType name="individual">
<xs:sequence>
<xs:element name="firstname" type="xs:string" minOccurs="0"/>
<xs:element name="dateOfBirth" type="xs:string" minOccurs="0"/>
<xs:element name="telephone" type="xs:string" minOccurs="0"/>
<xs:element name="email" type="xs:string" minOccurs="0"/>
<xs:element name="homeAddress" type="address" minOccurs="0"/>
<xs:element name="delivery" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="address" type="address" minOccurs="0"
maxOccurs="unbounded"/></xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:long"/>
<xs:attribute name="lastname" type="xs:string"/>
</xs:complexType>
![]()
<xs:complexType name="tag">
<xs:sequence>
<xs:element name="addresses" type="address" nillable="true"
minOccurs="0" maxOccurs="unbounded"/><xs:element name="name" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
![]()
<xs:complexType name="dateAdapter">
<xs:complexContent>
<xs:extension base="xmlAdapter">
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
![]()
<xs:complexType name="xmlAdapter" abstract="true">
<xs:sequence/>
</xs:complexType>
</xs:schema>
0
相关文章
