下面看看 sun 的 jaxb 2 列子,
可以将 xml schema 的规则 转成 我们的java代码,然后通过 Unmarshaller 来读取 一个xml 实例,这样可以减少我们 解析XML的麻烦。
首先创建一个 xml schema person.xsd
- <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <xsd:element name="Person">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="name" type="xsd:string" />
- <xsd:element name="sex" type="xsd:string" />
- <xsd:element name="age" type="xsd:int" />
- <xsd:element name="tel" type="xsd:string" />
- <xsd:element name="address" type="xsd:string" />
- </xsd:sequence>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
一个简单的Person 定义
通过 sun 提供的 xjc 的工具,可以把上面的 schema 转化成 java 代码
jdk 自带了一个,在dos下输入下面命令,, -p 指定生成代码的 包名。
xjc -p com.birds.person person.xsd
主意如果使用 jdk 自带的 xjc 就不需要 ,把 javaee 中jaxb 的包加入到classpath中去,用eclipse 也不需要加入。
jdk 1.6中有 自带的javax.xml.bind 包,
如果使用 javaee 中的 xjc 工具的话 ,要加入下面这些包
jaxb1-impl.jar
jaxb-api.jar
jaxb-impl.jar
jaxb-xjc.jar
并且生成对应的代码 需要指定 classpath 使用 com.sun.tools.xjc.XJCTask 来生成。
-----
下面是自动生成对应的2个类的代码
- package com.birds.person;
- import javax.xml.bind.annotation.XmlRegistry;
- @XmlRegistry
- public class ObjectFactory {
- public ObjectFactory() {
- }
-
- public Person createPerson() {
- return new Person();
- }
- }
再写一个 person.xml 数据,目的就是方面的读取xml中的数据
- <?xml version="1.0"?>
- <Person>
- <name>birds</name>
- <sex>man</sex>
- <age>32</age>
- <tel>0949855</tel>
- <address>China,Bejing</address>
- </Person>
最后是写个 客户端读取 数据
- JAXBContext jc = JAXBContext.newInstance( "com.birds.person" ); // 从生成代码的地方读取,
- Unmarshaller u = jc.createUnmarshaller();
- Person po =(Person)u.unmarshal(new FileInputStream( "person.xml" ) ); //加载xml数据文件。
- System.out.println(po.getAddress());
- System.out.println(po.getAge());