声明:本文为原创,欢迎转载,转载请注明出处。
simple的主页在http://simple.sourceforge.net/home.php
利用它可以方便的解析xml. 主要思路是先根据要解析的XML构建一个类,然后通过这个类去取xml里面具体的值域。
以下是一个简单的例子,学生记录里有年级,学号,姓名,性别等信息,现在通过simple xml把信息解出来。
John
Boy
Joe
Girl
Bill
Boy
首先在工程属性中把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 list;
public List getList() {
if (list == null) {
list = new ArrayList();
}
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 entries;
@Attribute(required=true)
protected String name;
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
public java.util.List getEntries(){
if(this.entries == null){
this.entries = new ArrayList();
}
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 gradeList = studentRecords.getList();
for (int gradeNo = 0; gradeNo < gradeList.size(); gradeNo++){
SunList eachList = (SunList)(gradeList.get(gradeNo));
List 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"?>JohnBoyJoeGirlBillBoy
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