java simplexml,Java中利用simpleFramework解析xml | 学步园

曾光远
2023-12-01

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

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

 类似资料: