XmlResourceParser解析XML文件

官方文档:

The XML parsing interface returned for an XML resource. This is a standard XmlPullParser interface, as well as an extended AttributeSet interface and an additional close() method on this interface for the client to indicate when it is done reading the resource.


解释:

XmlResourceParser是一个接口类,继承XmlPullParser和AttributeSet。它返回一个xml资源文件。这样说并不准确,应该是通过它可以访问xml中的资源。当结束使用后,可以调用其close方法。源码如下:

/**
 * The XML parsing interface returned for an XML resource.  This is a standard
 * XmlPullParser interface, as well as an extended AttributeSet interface and
 * an additional close() method on this interface for the client to indicate
 * when it is done reading the resource.
 */
public interface XmlResourceParser extends XmlPullParser, AttributeSet {
    /**
     * Close this interface to the resource.  Calls on the interface are no
     * longer value after this call.
     */
    public void close();
}

还有两个比较重要的标签:都是通过getEventType方法返回的。

START_TAG:开始读取xml文件的标签。

END_DOCUMENT:xml文件的结尾标签。如果getEventType()的结果是它,就说明读取完毕。


一样,拿一个例子说明:

1.创建一个xml文件(books.xml),用来解析:

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<book price="20" date="2012.12.12">android</book>
	<book price="20" date="2011.11.11">java</book>
	<book price="20" date="2010.10.10">c/c++</book>
</resources>

布局文件main.xml中,包含一个Button和TextView,Button用来执行解析xml操作,TextView显示解析结果,即books.xml文件中的内容。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="解析xml文件" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

主Activity代码:

package com.cb.parsexml;

import java.io.IOException;

import org.crazyit.image.R;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class ParseXml extends Activity {
	private TextView mTextView;
	private Button mParseXmlBtn;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		setContentView(R.layout.main);
		super.onCreate(savedInstanceState);

		mTextView = (TextView) findViewById(R.id.tv);
		mParseXmlBtn = (Button) findViewById(R.id.btn);
		mParseXmlBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				//根据指定的xml文件,返回XmlResourceParser。通过它,可以访问对应的xml文件中的数据
				XmlResourceParser xrp = getResources().getXml(R.xml.books);
				try {
					//StringBuilder对象用来储存获取的xml信息
					StringBuilder sb = new StringBuilder("");
					while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) { //是否读取到文件尾
						if (xrp.getEventType() == XmlResourceParser.START_TAG) { //是否是开始读取的标签
							//获取标签名称
							String tagName = xrp.getName();
							Log.i("cb", "tagName is " + tagName);
							if (tagName.equals("book")) {
								//获取属性值
								String bookPrice = xrp.getAttributeValue(null, "price");
								sb.append("价格:" + bookPrice + ",");
								String bookDate = xrp.getAttributeValue(null, "date");
								sb.append("日期:" + bookDate + ",");
								String bookName = xrp.nextText();
								sb.append("书名:" + bookName);
							}
							sb.append("\n");
						}
						//下一条记录
						xrp.next();
					}
					mTextView.setText(sb.toString());

				} catch (XmlPullParserException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				} 
			}
		});

	}
}

点击按钮后,效果如图:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值