Java中利用simpleFramework解析xml

12 篇文章 0 订阅



simple的主页在http://simple.sourceforge.net/home.php

利用它可以方便的解析xml. 主要思路是先根据要解析的XML构建一个类,然后通过这个类去取xml里面具体的值域。

以下是一个简单的例子,学生记录里有年级,学号,姓名,性别等信息,现在通过simple xml把信息解出来。

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <StudentRecords>  
  3.   <list name="grade1">  
  4.     <entry id="1">  
  5.         <name>John</name>  
  6.         <gender>Boy</gender>  
  7.     </entry>  
  8.     <entry id="2">  
  9.         <name>Joe</name>  
  10.         <gender>Girl</gender>  
  11.     </entry>  
  12.   </list>  
  13.   <list name="grade2">  
  14.     <entry id="1">  
  15.         <name>Bill</name>  
  16.         <gender>Boy</gender>  
  17.     </entry>  
  18.   </list>  
  19. </StudentRecords>  

首先在工程属性中把simple的jar加到Java Build Path的Libraries里面。这里用的是simple-xml-2.3.4.jar

构建的类具体如下,SunStudent是总类,里面有每个年级列表的集合;SunList是每个年级学生的列表,包含了一个学生集合;SunEntry是每个学生的信息类。

[java]  view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. import org.simpleframework.xml.ElementList;  
  5. import org.simpleframework.xml.Namespace;  
  6. import org.simpleframework.xml.Root;  
  7.   
  8.   
  9. @Root(name = "StudentRecords", strict=false)  
  10. @Namespace(reference = "urn:sun:params:xml:ns:students")  
  11. public class SunStudent {  
  12.   
  13.     @ElementList(inline=true, required=false)  
  14.     protected List<SunList> list;  
  15.           
  16.     public List<SunList> getList() {  
  17.         if (list == null) {  
  18.             list = new ArrayList<SunList>();  
  19.         }  
  20.         return this.list;  
  21.     }  
  22. }  

[java]  view plain copy
  1. import java.util.ArrayList;  
  2.   
  3. import org.simpleframework.xml.Attribute;  
  4. import org.simpleframework.xml.ElementList;  
  5. import org.simpleframework.xml.Namespace;  
  6. import org.simpleframework.xml.Root;  
  7.   
  8.   
  9. @Root(name = "list", strict=false)  
  10. @Namespace(reference = "urn:sun:params:xml:ns:students")  
  11. public class SunList {  
  12.   
  13.     @ElementList(inline=true, required=false)  
  14.     protected java.util.List<SunEntry> entries;  
  15.     @Attribute(required=true)  
  16.     protected String name;  
  17.      
  18.      
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.      
  23.     public void setName(String value) {  
  24.         this.name = value;  
  25.     }  
  26.      
  27.     public java.util.List<SunEntry> getEntries(){  
  28.         if(this.entries == null){  
  29.             this.entries = new ArrayList<SunEntry>();  
  30.         }  
  31.         return this.entries;  
  32.     }  
  33.   
  34. }  

[java]  view plain copy
  1. import org.simpleframework.xml.Attribute;  
  2. import org.simpleframework.xml.Element;  
  3. import org.simpleframework.xml.Namespace;  
  4. import org.simpleframework.xml.Root;  
  5.   
  6. @Root(name="entry", strict=false)  
  7. @Namespace(reference = "urn:sun:params:xml:ns:students")  
  8. public class SunEntry {  
  9.   
  10.     @Element(name = "name", required = true)  
  11.     protected String studentName;  
  12.     @Element(name = "gender", required = true)  
  13.     protected String studentGender;  
  14.     @Attribute(required = true)  
  15.     protected String id;  
  16.   
  17.     public String getStudentID() {  
  18.         return id;  
  19.     }  
  20.       
  21.     public void setstudentID(String value) {  
  22.         this.id = value;  
  23.     }  
  24.       
  25.     public String getStudentName() {  
  26.         return studentName;  
  27.     }  
  28.       
  29.     public void setstudentName(String value) {  
  30.         this.studentName = value;  
  31.     }  
  32.   
  33.     public String getStudentGender() {  
  34.         return studentGender;  
  35.     }  
  36.       
  37.     public void setstudentGender(String value) {  
  38.         this.studentGender = value;  
  39.     }  
  40.       
  41. }  

测试代码如下:

[java]  view plain copy
  1. import java.io.BufferedReader;  
  2. import java.io.FileInputStream;  
  3. import java.io.IOException;  
  4. import java.io.InputStreamReader;   
  5. import java.util.List;  
  6.   
  7. import org.simpleframework.xml.Serializer;  
  8. import org.simpleframework.xml.core.Persister;  
  9.   
  10. public class SunTest {    
  11.   
  12.     public static void main(String[] args) throws IOException {   
  13.         String result = "";  
  14.         BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\sun.xml")));  
  15.         String tmpStr = "";  
  16.         final Serializer serializer;  
  17.         serializer = new Persister();  
  18.           
  19.         while ((tmpStr = br.readLine())!=null){  
  20.             result = result + tmpStr.trim();  
  21.         }  
  22.         System.out.print("the xml file is: " + result + "\n");  
  23.         try {  
  24.             SunStudent studentRecords = serializer.read(SunStudent.classnew String(result));  
  25.             List<SunList> gradeList = studentRecords.getList();  
  26.             for (int gradeNo = 0; gradeNo < gradeList.size(); gradeNo++){  
  27.                 SunList eachList = (SunList)(gradeList.get(gradeNo));  
  28.                 List<SunEntry> entries = eachList.getEntries();  
  29.                 System.out.print("\n" + "student Grade: " + eachList.getName() + "\n");  
  30.                 for (int studentID = 0; studentID < entries.size(); studentID ++){  
  31.                     SunEntry eachEntry = (SunEntry)(entries.get(studentID));  
  32.                     System.out.print("student ID: " + eachEntry.getStudentID() + "\n");  
  33.                     System.out.print("student Name: " + eachEntry.getStudentName() + "\n");  
  34.                     System.out.print("student Gender: " + eachEntry.getStudentGender() + "\n");  
  35.                 }  
  36.             }  
  37.         }  
  38.         catch (Exception e) {  
  39.             // TODO Auto-generated catch block  
  40.             e.printStackTrace();  
  41.         }  
  42.     }  
  43. }  

打印结果如下:

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值