声明:本文为原创,欢迎转载,转载请注明出处。
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