simple的主页在http://simple.sourceforge.net/home.php
利用它可以方便的解析xml. 主要思路是先根据要解析的XML构建一个类,然后通过这个类去取xml里面具体的值域。
以下是一个简单的例子,学生记录里有年级,学号,姓名,性别等信息,现在通过simple xml把信息解出来。
- <?xml version="1.0" encoding="UTF-8"?>
- <StudentRecords>
- <list name="grade1">
- <entry id="1">
- <name>John</name>
- <gender>Boy</gender>
- </entry>
- <entry id="2">
- <name>Joe</name>
- <gender>Girl</gender>
- </entry>
- </list>
- <list name="grade2">
- <entry id="1">
- <name>Bill</name>
- <gender>Boy</gender>
- </entry>
- </list>
- </StudentRecords>
首先在工程属性中把simple的jar加到Java Build Path的Libraries里面。这里用的是simple-xml-2.3.4.jar
构建的类具体如下,SunStudent是总类,里面有每个年级列表的集合;SunList是每个年级学生的列表,包含了一个学生集合;SunEntry是每个学生的信息类。
- import java.util.ArrayList;
- import java.util.List;
- import org.simpleframework.xml.ElementList;
- import org.simpleframework.xml.Namespace;
- import org.simpleframework.xml.Root;
- @Root(name = "StudentRecords", strict=false)
- @Namespace(reference = "urn:sun:params:xml:ns:students")
- public class SunStudent {
- @ElementList(inline=true, required=false)
- protected List<SunList> list;
- public List<SunList> getList() {
- if (list == null) {
- list = new ArrayList<SunList>();
- }
- return this.list;
- }
- }
- import java.util.ArrayList;
- import org.simpleframework.xml.Attribute;
- import org.simpleframework.xml.ElementList;
- import org.simpleframework.xml.Namespace;
- import org.simpleframework.xml.Root;
- @Root(name = "list", strict=false)
- @Namespace(reference = "urn:sun:params:xml:ns:students")
- public class SunList {
- @ElementList(inline=true, required=false)
- protected java.util.List<SunEntry> entries;
- @Attribute(required=true)
- protected String name;
- public String getName() {
- return name;
- }
- public void setName(String value) {
- this.name = value;
- }
- public java.util.List<SunEntry> getEntries(){
- if(this.entries == null){
- this.entries = new ArrayList<SunEntry>();
- }
- return this.entries;
- }
- }
- import org.simpleframework.xml.Attribute;
- import org.simpleframework.xml.Element;
- import org.simpleframework.xml.Namespace;
- import org.simpleframework.xml.Root;
- @Root(name="entry", strict=false)
- @Namespace(reference = "urn:sun:params:xml:ns:students")
- public class SunEntry {
- @Element(name = "name", required = true)
- protected String studentName;
- @Element(name = "gender", required = true)
- protected String studentGender;
- @Attribute(required = true)
- protected String id;
- public String getStudentID() {
- return id;
- }
- public void setstudentID(String value) {
- this.id = value;
- }
- public String getStudentName() {
- return studentName;
- }
- public void setstudentName(String value) {
- this.studentName = value;
- }
- public String getStudentGender() {
- return studentGender;
- }
- public void setstudentGender(String value) {
- this.studentGender = value;
- }
- }
测试代码如下:
- import java.io.BufferedReader;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.List;
- import org.simpleframework.xml.Serializer;
- import org.simpleframework.xml.core.Persister;
- public class SunTest {
- public static void main(String[] args) throws IOException {
- String result = "";
- BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\sun.xml")));
- String tmpStr = "";
- final Serializer serializer;
- serializer = new Persister();
- while ((tmpStr = br.readLine())!=null){
- result = result + tmpStr.trim();
- }
- System.out.print("the xml file is: " + result + "\n");
- try {
- SunStudent studentRecords = serializer.read(SunStudent.class, new String(result));
- List<SunList> gradeList = studentRecords.getList();
- for (int gradeNo = 0; gradeNo < gradeList.size(); gradeNo++){
- SunList eachList = (SunList)(gradeList.get(gradeNo));
- List<SunEntry> entries = eachList.getEntries();
- System.out.print("\n" + "student Grade: " + eachList.getName() + "\n");
- for (int studentID = 0; studentID < entries.size(); studentID ++){
- SunEntry eachEntry = (SunEntry)(entries.get(studentID));
- System.out.print("student ID: " + eachEntry.getStudentID() + "\n");
- System.out.print("student Name: " + eachEntry.getStudentName() + "\n");
- System.out.print("student Gender: " + eachEntry.getStudentGender() + "\n");
- }
- }
- }
- catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
打印结果如下:
the xml file is: <?xml version="1.0" encoding="UTF-8"?><StudentRecords><list name="grade1"><entry id="1"><name>John</name><gender>Boy</gender></entry><entry id="2"><name>Joe</name><gender>Girl</gender></entry></list><list name="grade2"><entry id="1"><name>Bill</name><gender>Boy</gender></entry></list></StudentRecords>
student Grade: grade1
student ID: 1
student Name: John
student Gender: Boy
student ID: 2
student Name: Joe
student Gender: Girl
student Grade: grade2
student ID: 1
student Name: Bill
student Gender: Boy