现在的位置: 首页 > 综合 > 正文

Android中,把XML文件转换成Object对象的方法

2013年09月22日 ⁄ 综合 ⁄ 共 3176字 ⁄ 字号 评论关闭

XML文件为:

 

 

<?xml version="1.0" encoding="UTF-8"?>
<profile>
	<title>Android开发实例基础</title>
	<totalTime>120</totalTime>
	<totalScore>100</totalScore>
	<subjectCount>70</subjectCount>
	<score>0</score>
	<elapsedTime>0</elapsedTime>
	<passingScore>60</passingScore>
	<descriptions>描述</descriptions>
	<matrix>1111111111111111111111111111111111111111111111111111111111111111111111</matrix>
</profile>

 

 

XML对应的Java对象为:

 

 

package com.lurencun.chenyoca.exam.entity;

public class ProfileObject {
	/**
	 * 考卷信息
	 */
	private TestpaperObject testpaper = null;
	
	/**
	 * 题目对错矩阵
	 */
	private boolean[] matrix = null;
	
	public TestpaperObject getTestpaper() {
		if(testpaper == null) testpaper = new TestpaperObject();
		return testpaper;
	}
	public void setTestpaper(TestpaperObject testpaper) {
		this.testpaper = testpaper;
	}
	public boolean[] getMatrix() {
		return matrix;
	}
	public void setMatrix(boolean[] matrix) {
		this.matrix = matrix;
	}
	
}

 

 

把XML转换成Java对象的类:

 

 

package com.lurencun.chenyoca.exam.util;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.lurencun.chenyoca.exam.entity.ProfileObject;

public class XmlToPVO extends DefaultHandler {
	private ProfileObject po;
	private StringBuffer buffer = new StringBuffer();
	private final static String TAG = "1";
	public ProfileObject getProfile(){
		return po;
	}
	
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if(localName.equals("profile")){
			po = new ProfileObject();
		}
		super.startElement(uri, localName, qName, attributes);
	}
	
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		buffer.append(ch,start,length); //这个很关键
		super.characters(ch, start, length);
	}
	
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		boolean cleanBuffer = true;
		if(localName.equals("profile")){ 
			cleanBuffer = false;
		}else if(localName.equals("title")){ 
			po.getTestpaper().setTitle(buffer.toString().trim());
		}else if(localName.equals("totalTime")){ 
			po.getTestpaper().setTotalTime(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("totalScore")){ 
			po.getTestpaper().setTotalScore(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("subjectCount")){ 
			po.getTestpaper().setSubjectCount(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("score")){ 
			po.getTestpaper().setScore(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("elapsedTime")){ 
			po.getTestpaper().setElapsedTime(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("passingScore")){ 
			po.getTestpaper().setPassingScore(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("descriptions")){ 
			po.getTestpaper().setDescription(buffer.toString().trim());
		}else if(localName.equals("matrix")){
			char[] mx = buffer.toString().toCharArray();
			boolean[] matrix = new boolean[mx.length];
			for(int i=0;i<mx.length;i++){
				if(TAG.equals(mx[i])){
					matrix[i] = true;
				}else{
					matrix[i] = false;
				}
			}
			po.setMatrix(matrix);
		}
		if(cleanBuffer) buffer.setLength(0);
		super.endElement(uri, localName, qName);
	}
}

 

   在需要执行XML转换的地方执行以下代码:

 

 

XmlToTVO xtt = new XmlToTVO(testpaperList); //构造方法是我自己的
//file是 File对象实体,是XML文件的对象实体。
android.util.Xml.parse(new FileInputStream(file),Xml.Encoding.UTF_8,xml);

 

   Android框架的SAX引擎会自动调用相关方法,把XML中的数据填充到JavaObject中。

 

   更多相关SAX的知识,请自己Google。

【上篇】
【下篇】

抱歉!评论已关闭.