您的位置:首页 > 编程语言 > Java开发

Java中利用simpleFramework解析xml

2012-03-11 16:51 609 查看
声明:本文为原创,欢迎转载,转载请注明出处。

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息