Android之Sax解析xml(4)

                   在Android中xml解析还是很重要的,主要有两种方法,一种是之前讲到的DOM解析,一种就这节课

Sax解析,其实两种解析的基本形式异曲同工。

第一步:定义节点

public class LinkMan {
	private String name;
	private String email;
	
	public void setName(String name){
		this.name=name;
		
	}
	public String getName(){
		return name;
	}
	public void setEmail(String email){
		this.email=email;
	}
	public String getEmail(){
		return email;
		
	}
	

}

然后我们定义解析器,sax解析器功能是将xml文件数据全部取出,并且将数据封装的对象保存在list中,采取顺序方式,每次取出进行判断,并且将指定数据提出,最后将所有数据用getall拿出

public class MySax extends DefaultHandler {
	private List<LinkMan> all = null ;	// 保存多条数据
	private LinkMan man = null ;
	private String elementName = null ;	// 保存节点的名称
	
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if(this.elementName != null) {	// 已经取得了元素名称
			String data = new String(ch,start,length) ;
			if("name".equals(this.elementName)) {
				this.man.setName(data) ;
			} else if ("email".equals(this.elementName)) {
				this.man.setEmail(data) ;
			}
		}
	}

	
	
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if("linkman".equals(localName)) {
			this.all.add(this.man) ;
			this.man = null ;	// 准备保存下次的数据
		}
		this.elementName = null;// 把元素名称清空
	}

	@Override
	public void startDocument() throws SAXException {
		this.all = new ArrayList<LinkMan>() ;	// 表示开始解析文档,所以要设置集合
	}

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if("linkman".equals(localName)) {	// 是一个linkman节点
			this.man = new LinkMan() ;	// 实例化LinkMan对象
		}
		this.elementName = localName ;	// 保存元素名称
	}

	public List<LinkMan> getAll() {
		return all;
	}
	
}

  最后定义Activity:

public class MainActivity extends Activity {
	private TextView name = null;
	private TextView email = null;
	private Button but = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_main);
		this.name = (TextView) super.findViewById(R.id.name);
		this.email = (TextView) super.findViewById(R.id.email);
		this.but = (Button) super.findViewById(R.id.but);
		this.but.setOnClickListener(new OnClickListenerImpl());
	}

	private class OnClickListenerImpl implements OnClickListener {

		@Override
		public void onClick(View v) {
			if (!Environment.getExternalStorageState().equals(
					Environment.MEDIA_MOUNTED)) { // 不存在不操作
				return; // 返回到程序的被调用处
			}
			File file = new File(Environment.getExternalStorageDirectory()
					+ File.separator + "mldndata" + File.separator
					+ "member.xml"); // 要输出文件的路径
			if (!file.exists()) { // 文件不存在
				return;
			}
			SAXParserFactory factory = SAXParserFactory.newInstance() ;
			SAXParser parser = null ;
			MySax sax = new MySax() ;
			try {
				parser = factory.newSAXParser() ;
			} catch (ParserConfigurationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SAXException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				parser.parse(file, sax) ;
			} catch (SAXException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block 
				e.printStackTrace();
			}
			List<LinkMan> all = sax.getAll() ;
			System.out.println(all.size());
			MainActivity.this.name.setText(all.get(0).getName()) ;
			MainActivity.this.email.setText(all.get(0).getEmail()) ;
		}

	}
}

 读取效果同上节课。

猜你喜欢

转载自429899791.iteye.com/blog/2202565