技术开发 频道

使用JAXB从一个对象模型中产生XML文档


IT168技术文档】 
     Unmarshal和产生Schema 
     如图1所示,JAXB可以用来unmarshal,产生和编译一个schema,也就是用先前获得的XML文档来产生对象图表。首先得到一个JAXBContext,创建一个Unmarshaller对象,调用unmarshal方法,然后返回Individual的属性及他的一个实例:
// 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());
     一个XML schema描述了XML文档的结构,用XML语法来写的。如果你对XML schema了解的不多,你也可以使用Sun的JAXB实现提供的schemaGen工具来产生一个XML schema。如Listing 3,可以看到Address, Company, Individual和 Tag类被描述为复杂的类型:
<?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>
     如果下载JAXB,schema编译器(xjc)也会被一同下载。
0
相关文章