Android DOM解析XML格式数据

下面简单的说明使用DOM如何解析XML格式数据,主要代码如下:

    		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
			Document document = documentBuilder.parse(inputStream);
			Element root = document.getDocumentElement();
			NodeList nodes = root.getElementsByTagName("person");
			for(int i = 0; i < nodes.getLength(); i++) {
				Element personElement = (Element) nodes.item(i);
				System.out.println("****************************");
				System.out.println("id:" + personElement.getAttribute("id"));
				stringBuffer.append("*************************\n").append("id:" + personElement.getAttribute("id") + "\n");
				NodeList childNodes = personElement.getChildNodes();
				for(int y = 0; y < childNodes.getLength(); y++) {
					Node childNode = childNodes.item(y);
					if(childNode.getNodeType() == Node.ELEMENT_NODE) {
						Element childElement = (Element) childNode;
						if("name".equals(childElement.getNodeName())) {
							System.out.println("name:" + childElement.getFirstChild().getNodeValue());
							stringBuffer.append("name:" + childElement.getFirstChild().getNodeValue() + "\n");
						} else if("address".equals(childElement.getNodeName())) {
							System.out.println("address:" + childElement.getFirstChild().getNodeValue());
							stringBuffer.append("address:" + childElement.getFirstChild().getNodeValue() + "\n");
						}
					}
				}
			}

被解析的XML文件内容如下:

<persons>
	<person id="1">
		<name>张三</name>
		<address>安徽</address>
	</person>
	<person id="2">
		<name>李四</name>
		<address>上海</address>
	</person>
	<person id="3">
		<name>王五</name>
		<address>北京</address>
	</person>
</persons>

 解析的结果如下:




Activity代码如下:

import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class AndroidDOMActivity extends Activity {
	
	private Handler mHandler = new Handler();
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        new Thread(new Runnable() {
			
			@Override
			public void run() {
				try {
					Thread.sleep(5 * 000);
					mHandler.post(new Runnable() {
						
						@Override
						public void run() {
							try {
								((TextView)findViewById(R.id.display)).setText(parserXml(getAssets().open("data.xml")));
							} catch (IOException e) {
								e.printStackTrace();
							}
						}
					});
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}).start();
        
    }
    
	private String parserXml(InputStream inputStream) {
    	
    	StringBuffer stringBuffer = new StringBuffer();
    	try {
    		
    		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
			Document document = documentBuilder.parse(inputStream);
			Element root = document.getDocumentElement();
			NodeList nodes = root.getElementsByTagName("person");
			for(int i = 0; i < nodes.getLength(); i++) {
				Element personElement = (Element) nodes.item(i);
				System.out.println("****************************");
				System.out.println("id:" + personElement.getAttribute("id"));
				stringBuffer.append("*************************\n").append("id:" + personElement.getAttribute("id") + "\n");
				NodeList childNodes = personElement.getChildNodes();
				for(int y = 0; y < childNodes.getLength(); y++) {
					Node childNode = childNodes.item(y);
					if(childNode.getNodeType() == Node.ELEMENT_NODE) {
						Element childElement = (Element) childNode;
						if("name".equals(childElement.getNodeName())) {
							System.out.println("name:" + childElement.getFirstChild().getNodeValue());
							stringBuffer.append("name:" + childElement.getFirstChild().getNodeValue() + "\n");
						} else if("address".equals(childElement.getNodeName())) {
							System.out.println("address:" + childElement.getFirstChild().getNodeValue());
							stringBuffer.append("address:" + childElement.getFirstChild().getNodeValue() + "\n");
						}
					}
				}
			}
			
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (inputStream != null) {
				try {
					inputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		return stringBuffer.toString();
    	
    }
    
}

说明:

  • 开启新的线程做解析操作;
  • 利用Handler更新UI;

布局文件如下main.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" >

    <TextView
        android:id="@+id/display"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

猜你喜欢

转载自wangleyiang.iteye.com/blog/1768395
今日推荐