Java中利用simpleFramework解析xml

来源:互联网 发布:免费提词器软件 编辑:程序博客网 时间:2024/05/18 03:21

声明:本文为原创,欢迎转载,转载请注明出处。


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 blocke.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