欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android之Sax解析xml(4)

程序员文章站 2022-07-12 18:10:32
...

                   在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()) ;
		}

	}
}

 读取效果同上节课。

 

相关标签: 安卓 Sax解析