xml解析之SAXParser的简单使用

基于事件驱动的解析方式,不像DOM解析一样把整个文档放入内存中。

实现将xml文档解析并放入list集合中:

1、此处在assets文件夹中创建xml文件,eg: 

movie.xml

<span style="font-size:18px;"><root>
    <value>
        <type_en>navigation</type_en>
        <type_ch>导航</type_ch>
        <count>3</count>
    </value>
    <value>
        <type_en>synch_theatre</type_en>
        <type_ch>同步剧场</type_ch>
        <count>6</count>
    </value>
    <value>
        <type_en>hot_film</type_en>
        <type_ch>热播电影</type_ch>
        <count>6</count>
    </value>
    <value>
        <type_en>vip_film</type_en>
        <type_ch>会员电影</type_ch>
        <count>6</count>
    </value>
    <value>
        <type_en>animation</type_en>
        <type_ch>动画片</type_ch>
        <count>6</count>
    </value>
</root></span>
<pre name="code" class="html"><span style="font-size:18px;"><strong>//xml对应的bean类。</strong></span>
<span style="font-size:18px;">public class MovieXMLBean {
	String type_en;
	String type_ch;
	String count;

	public String getType_en() {
		return type_en;
	}

	public void setType_en(String type_en) {
		this.type_en = type_en;
	}

	public String getType_ch() {
		return type_ch;
	}

	public void setType_ch(String type_ch) {
		this.type_ch = type_ch;
	}

	public String getCount() {
		return count;
	}

	public void setCount(String count) {
		this.count = count;
	}

}</span>

 

2、SAXParser 的初始化

// An instance of this class can be obtained from the javax.xml.parsers.SAXParserFactory.newSAXParser() method. 

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser saxParser = factory.newSAXParser();

3、需要一个File

InputStream is = getContext().getAssets().open("movie.xml");

4、解析并注册监听类

saxParser.parse(is, new MyHandler());//MyHandler为自定义,在5中有解释

5、自定义,用于监听事件

<span style="font-size:18px;">class MyHandler extends DefaultHandler {
		String str;//保存起始元素名称

		@Override
		public void startElement(String uri, String localName, String qName, Attributes attributes)
				throws SAXException {
			str = localName;
			super.startElement(uri, localName, qName, attributes);
		}
<span style="white-space:pre">		</span>//注意1、ch一块字符串内存,每次解析完成将结果放入ch中,start为起始位置,length为结果的长度,而非ch长度</span>
<span style="font-size:18px;"><span style="white-space:pre">		</span>//注意2、<span style="font-family:Arial, Helvetica, sans-serif;">前一个元素跟下一个元素之间如果存在内容仍然会调用。如:</one> 123 <two> ,123会被存入ch中。</span>
		@Override
		public void characters(char[] ch, int start, int length) throws SAXException {
			if (TextUtils.isEmpty(str)) {
				return;
			}
			String chars = new String(ch, start, length);
			if (xmlBean == null) {
				xmlBean = new MovieXMLBean();
			}
			switch (str) {
			case "type_en":
				xmlBean.setType_en(chars);
				break;
			case "type_ch":
				xmlBean.setType_ch(chars);
				break;
			case "count":
				xmlBean.setCount(chars);
				break;
			default:
				break;
			}
			super.characters(ch, start, length);
		}
<span style="white-space:pre">		</span>//元素结束时调用
		@Override
		public void endElement(String uri, String localName, String qName) throws SAXException {
			if (!TextUtils.isEmpty(str) && str.equals("count")) {
				if (lists == null) {
					lists = new ArrayList<MovieXMLBean>();
				}
				lists.add(xmlBean);
				xmlBean = new MovieXMLBean();
			}
			str = null;
			super.endElement(uri, localName, qName);
		}
<span style="white-space:pre">		</span>//解析文档结束时调用
		@Override
		public void endDocument() throws SAXException {
			
			super.endDocument();
		}
	}</span>
<span style="font-size:18px;"><span style="white-space:pre">	</span><span style="color:#ff0000;">总结:通过以上步骤能简单实现对xml文档解析,并存放到list集合中。</span></span>



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值