jaxb 解析xml

 <!--原xml-->

 

代码
<?xml version="1.0" encoding="gb2312"?>
<people>
<student>
<name>学生姓名</name>
<age>23</age>
</student>
<teacher>
<name>教师名称</name>
<age>40</age>
<school>学校名称</school>
</teacher>
</people>

 

 

 具体步骤:

1. 将xml装换为xsd文件 (a) 下载 Altova XMLSpy 工具(破解版最好,不行就到官网下载http://www.altova.com/xml-editor/试用30天) (b) 在 Altova XMLSpy 中打开 xml文件 ,选择DTD/Schema --> Generate DTD/Schema... ok 就行。。 
生成文件如下:

代码
<?xml version="1.0" encoding="UTF-8"?>
<!--W3C Schema generated by XMLSpy v2011 sp1 (http://www.altova.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="teacher">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="age"/>
<xs:element ref="school"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="student">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="age"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="school">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="学校名称"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="people">
<xs:complexType>
<xs:sequence>
<xs:element ref="student"/>
<xs:element ref="teacher"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="学生姓名"/>
<xs:enumeration value="教师名称"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:enumeration value="23"/>
<xs:enumeration value="40"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>

 

2.2. 将xsd 文件生成Java代码该步骤需要jaxb文件
 (a) 打开下载的jaxb文件,在bin目录下执行xjc命令
  xjc -p "org.xml.generated" c:\People.xsd
  "org.xml.generated" --> 为生成Java代码指定包名
  c:\People.xsd --> xsd文件路径
  
  正确后可以在bin目录下看到生成的代码
 (b)将生成的代码放到程序中

 

代码
package org.xml;

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.UnmarshalException;
import javax.xml.bind.Unmarshaller;
import org.xml.generated.People;
import org.xml.generated.Student;
import org.xml.generated.Teacher;

/**
* 解析xml
*
@author Administrator
*
*/
public class ParseXml {

public static void main(String[] args) {
try {
JAXBContext context
= JAXBContext.newInstance("org.xml.generated"); //包名
Unmarshaller unmarshaller = context.createUnmarshaller();
Object object
= unmarshaller.unmarshal(new File("C:\\people.xml")); // xml 路径
People people = (People)object;

Student student
= people.getStudent();
System.out.println(
"student.name=" + student.getName());
System.out.println(
"student.age=" + student.getAge());

Teacher teacher
= people.getTeacher();
System.out.println(
"teacher.name=" + teacher.getName());
System.out.println(
"teacher.age=" + teacher.getAge());
System.out.println(
"teacher.school=" + teacher.getSchool());

}
catch (UnmarshalException ex){
ex.printStackTrace();
}
catch (JAXBException e) {
e.printStackTrace();
}
}
}

生成的代码和xsd文件可以看看有些地方可能需要修改,另外jaxb下载文件中也有相关的实例。

 

 

 

posted @ 2011-01-09 15:11  opqrst  阅读(1292)  评论(0)    收藏  举报