ITEEDU

原始XML文件的使用

获得原始XML文件的基本思路是,通过getResources().getXml()获得XML原始文件,得到XmlResourceParser对象,通过该对象来判断是文档的开始还是结尾、是某个标签的开始还是结尾,并通过一些获得属性的方法来遍历XML文件,从而访问XML文件的内容。下面的实例演示了如何访问XML文件内容,并将内容显示在一个TextView中。

在"Chapter03_Resource"工程中的res\xml\目录下,创建一个test.xml文件。该文件中定义了两条客户信息,属性信息有姓名、年龄、性别和E-mail地址,内容如下所示。

<?xml version="1.0" encoding="utf-8"?>
	<resources>
		<customer name="tom" age="20" gender="male" email="tom@yahoo.com" />
		<customer name="kite" age="21" gender="male" email="kite@yahoo.com" />
	</resources>

在该工程的res\layout\目录下,创建一个test_xml.xml布局文件,该布局文件中添加一个Button和一个TextView视图组件。Button用于响应单击事件访问XML内容,TextView用于显示XML内容。

<?xml version="1.0" encoding="utf-8"?>
	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
		android:orientation="vertical" android:layout_width="fill_parent"
		android:layout_height="fill_parent">
		<Button android:text="获得XML内容" android:id="@+id/xmltTestButton01"
			android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
		<TextView android:text="" android:id="@+id/xmlContentTextView01"
			android:layout_width="wrap_content" android:layout_height="wrap_content" />
	</LinearLayout>

在该工程的com.amaker.ch03.xml包中创建一个TestXmlActivity类。在该类顶部声明使用到的TextView和Button,在onCreate()方法中实例化,添加Button的单击事件,获得XML内容显示在TextView中。

public class TestXmlActivity extends Activity {
	private TextView myTextView;
	private Button myButton;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 设置当前Activity的内容布局视图
		setContentView(R.layout.test_xml);
		// 通过findViewById方法获得TextView实例
		myTextView = (TextView) findViewById(R.id.xmlContentTextView01);
		// 通过findViewById方法获得Button实例
		myButton = (Button) findViewById(R.id.xmltTestButton01);
		// 设置按钮的单击事件监听器
		myButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 定义计数器
				int counter = 0;
				// 实例化StringBuilder
				StringBuilder sb = new StringBuilder("");
				// 获得Resources 实例
				Resources r = getResources();
				// 通过Resources,获得XmlResourceParser实例
				XmlResourceParser xrp = r.getXml(R.xml.test);
				try {
					// 如果没有到文件尾继续循环
					while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
						// 如果是开始标签
						if (xrp.getEventType() == XmlResourceParser.START_TAG) {
							// 获得标签名称
							String name = xrp.getName();
							// 判断标签名称是否等于customer
							if (name.equals("customer")) {
								counter++;
								// 获得标签属性追加到StringBuilder中
								sb.append("第" + counter + "条客户信息:" + "\n");
								sb.append(xrp.getAttributeValue(0) + "\n");
								sb.append(xrp.getAttributeValue(1) + "\n");
								sb.append(xrp.getAttributeValue(2) + "\n");
								sb.append(xrp.getAttributeValue(3) + "\n\n");
							}
						} else if (xrp.getEventType() == XmlPullParser.END_TAG) {
						} else if (xrp.getEventType() == XmlPullParser.TEXT) {
						}
						// 下一个标签
						xrp.next();
					}
					// 将StringBuilder设置为TextView的文本
					myTextView.setText(sb.toString());
				} catch (XmlPullParserException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		});
	}
}