《安卓应用开发学习》--XML解析作业

实现功能:解析Addresstable.xml,里面存放的是中国的省、市、县、镇,通过省、市查看对应的、县市,然后在查询下一级

<China>
  <firstAddress AddressCode="1100000000" AddressName="北京" Addressdisabled="N">
    <secondAddress AddressCode="1101000000" AddressName="市辖区" Addressdisabled="N">
      <thirdAddress AddressCode="1101010000" AddressName="东城区1" Addressdisabled="N" />
      <thirdAddress AddressCode="1101020000" AddressName="西城区" Addressdisabled="N" />
      <thirdAddress AddressCode="1101030000" AddressName="崇文区" Addressdisabled="N" />
      <thirdAddress AddressCode="1101040000" AddressName="宣武区" Addressdisabled="N" />
      <thirdAddress AddressCode="1101050000" AddressName="朝阳区" Addressdisabled="N" />
      <thirdAddress AddressCode="1101060000" AddressName="丰台区" Addressdisabled="N" />
      <thirdAddress AddressCode="1101070000" AddressName="石景山区" Addressdisabled="Y" />
      <thirdAddress AddressCode="1101080000" AddressName="海淀区" Addressdisabled="Y" />
      <thirdAddress AddressCode="1101090000" AddressName="门头沟区" Addressdisabled="Y" />
      <thirdAddress AddressCode="1101110000" AddressName="房山区" Addressdisabled="Y" />
      <thirdAddress AddressCode="1101120000" AddressName="通州区" Addressdisabled="Y" />
      <thirdAddress AddressCode="1101130000" AddressName="顺义区" Addressdisabled="Y" />
      <thirdAddress AddressCode="1101140000" AddressName="昌平区" Addressdisabled="Y" />
      <thirdAddress AddressCode="1101150000" AddressName="大兴区" Addressdisabled="Y" />
      <thirdAddress AddressCode="1101160000" AddressName="怀柔区" Addressdisabled="Y" />
      <thirdAddress AddressCode="1101170000" AddressName="平谷区" Addressdisabled="Y" />
    </secondAddress>
    <secondAddress AddressCode="1102000000" AddressName="县" Addressdisabled="N">
      <thirdAddress AddressCode="1102280000" AddressName="密云" Addressdisabled="N" />
      <thirdAddress AddressCode="1102290000" AddressName="延庆县" Addressdisabled="N" />
    </secondAddress>
  </firstAddress>

部分文件展示,解析XML文件的核心代码如下:

public void getChinaAddresssFromXml(Context context,String fileName) {
		Node first = null;
		Node second = null;
		Node third = null;
		try {
			// 首先找到xml文件
			factory = DocumentBuilderFactory.newInstance();
			// 找到xml,并加载文档
			builder = factory.newDocumentBuilder();
			inputStream = context.getResources().getAssets().open(fileName);
			document = builder.parse(inputStream);
			// 找到根Element
			Element root = document.getDocumentElement();
			// firstAddress
			NodeList nodelist = root.getChildNodes();
			for (int i = 0; i < nodelist.getLength(); i++) {
				first = nodelist.item(i);
				// firstAddress
				if (first.getNodeType() == Node.ELEMENT_NODE) {
					if (first.getNodeName().equals("firstAddress")) {
						NamednodeMap namednodemap = first.getAttributes();
						String AddressCode = namednodemap.getNamedItem(
								"AddressCode").getNodeValue();
						String AddressName = namednodemap.getNamedItem(
								"AddressName").getNodeValue();
						String Addressdisabled = namednodemap.getNamedItem(
								"Addressdisabled").getNodeValue();

						province.add(new ChinaAddress(AddressCode,AddressName,Addressdisabled));

					}
				}
				// secondAddress
				for (second = first.getFirstChild(); second != null; second = second
						.getNextSibling()) {
					if (second.getNodeType() == Node.ELEMENT_NODE) {
						if (second.getNodeName().equals("secondAddress")) {
							NamednodeMap namednodemap = second.getAttributes();
							String AddressCode = namednodemap.getNamedItem(
									"AddressCode").getNodeValue();
							String AddressName = namednodemap.getNamedItem(
									"AddressName").getNodeValue();
							String Addressdisabled = namednodemap.getNamedItem(
									"Addressdisabled").getNodeValue();

							county.add(new ChinaAddress(AddressCode,Addressdisabled));

						}

					}
					// thirdAddress
					for (third = second.getFirstChild(); third != null; third = third
							.getNextSibling()) {
						if (third.getNodeType() == Node.ELEMENT_NODE) {
							if (third.getNodeName().equals("thirdAddress")) {
								NamednodeMap namednodemap = third
										.getAttributes();
								String AddressCode = namednodemap.getNamedItem(
										"AddressCode").getNodeValue();
								String AddressName = namednodemap.getNamedItem(
										"AddressName").getNodeValue();
								String Addressdisabled = namednodemap
										.getNamedItem("Addressdisabled")
										.getNodeValue();

								town.add(new ChinaAddress(AddressCode,Addressdisabled));
							}
						}

					}

				}

			}

		} catch (IOException e) {
			e.printstacktrace();
		} catch (SAXException e) {
			e.printstacktrace();
		} catch (ParserConfigurationException e) {
			e.printstacktrace();
		} finally {
			try {
				inputStream.close();
			} catch (IOException e) {
				e.printstacktrace();
			}
		}

	}

该XML文件里主要有三个标签firstAddress,secondAddress,thirdAddress,通过for循环调用getNo的Name()方法进行判断,然后调用getAttributes()获取属性,接着再调用getNamedItem("AddressCode").getNodeValue()获取对应属性名的值即可。

使用ListView展示部分,具体看代码,并不难。主要是解析XML获取到想要的值填充到

private ArrayList<ChinaAddress> province = new ArrayList<ChinaAddress>();
private ArrayList<ChinaAddress> county = new ArrayList<ChinaAddress>();
private ArrayList<ChinaAddress> town = new ArrayList<ChinaAddress>();

然后再映射到对应的ListView即可,关键部分是就是ListView的监听,获取对应项的AddressCode,并用于判断下一个ListView应该填充哪些内容

listview.setonItemClickListener(new OnItemClickListener() {

			@SuppressWarnings("unchecked")
			@Override
			public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
				HashMap<String,Object> map = (HashMap<String,Object>) parent
						.getItemAtPosition(position);
				String name = (String) map.get("AddressName");
				AddressCode = (String) map.get("AddressCode");
				String keyCode = AddressCode.substring(0,2);
				// Toast.makeText(MainActivity.this,name + keyCode,0).show();
				HashMap<String,Object> countymap;
				ChinaAddress c;
				countyDataList.clear();
				for (int i = 0; i < county.size(); i++) {
					c = new ChinaAddress();
					c = county.get(i);
					// 根据代码获取选区省市对应的县、镇
					if (c.getAddressCode().substring(0,2).equals(keyCode)) {
						countymap = new HashMap<String,Object>();
						countymap.put("AddressName",c.getAddressName());
						countymap.put("AddressCode",c.getAddressCode());
						countymap.put("Addressdisabled",c.getAddressdisabled());
						countyDataList.add(countymap);
					}

				}
				// 设置countyDataList共享
				((MyAppData) getApplication())
						.setCountyDataList(countyDataList);
				Intent intent = new Intent();
				intent.putExtra("TITLE",name);
				intent.setClass(MainActivity.this,CountyActivity.class);
				startActivity(intent);
			}
		});


基本上差不多,代码很简单,下载源代码自己查看即可。对了,搜素功能暂未实现,有兴趣可以自己试试。

http://pan.baidu.com/s/1ntt4RA5点击打开链接

运行截图:






版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇