总结
豆包 AI 助手文章总结

android如何使用DOM和SAXParserFactory来解析XML文件

黄舟
发布: 2017-02-20 15:00:21
原创
1867人浏览过

对于以下的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<books>  
    <book email="zhoujunhui">  
        <name>rjzjh</name>  
        <price>jjjjjj</price>  
    </book>  
     <book email="aaaaaaaaa">  
        <name>bbbb</name>  
        <price>ccc</price>  
    </book>  
</books>
登录后复制


这样来解析:

import java.util.ArrayList;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.util.Log;

public class TestActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		XmlReader();
		for(int i=0;i<list.size();i++) {
			Book book = list.get(i);
			Log.d("TAG", "name="+book.name+"email="+book.email);
		}
	}


	public void XmlReader() {
		Document doc = null;
		AssetManager assetManager = this.getAssets();
		DocumentBuilder docBuilder = null;
		DocumentBuilderFactory docBuilderFactory = null;
		try {
			docBuilderFactory = DocumentBuilderFactory.newInstance();
			docBuilder = docBuilderFactory.newDocumentBuilder();
			doc = docBuilder.parse(assetManager.open("test1.xml"));
			Element root = doc.getDocumentElement();
			NodeList books = root.getChildNodes();
			if (books != null) {
				for (int i = 0; i < books.getLength(); i++) {
					Node book = books.item(i);
					Book mybook = null;
					if (book.getNodeType() == Node.ELEMENT_NODE) {
						//这里才表示这个是<book>节点
						mybook = new Book();
						String email = book.getAttributes()
								.getNamedItem("email").getNodeValue();
						mybook.email = email;
						
						for (Node node = book.getFirstChild(); node != null; node = node
								.getNextSibling()) {
							
							if (node.getNodeType() == Node.ELEMENT_NODE) {
								if (node.getNodeName().equals("name")) {
									String name1 = node.getFirstChild()
											.getNodeValue();
									mybook.name = name1;
								}
								if (node.getNodeName().equals("price")) {
									String price = node.getFirstChild()
											.getNodeValue();
									mybook.price = price;
								}
							}
							
						}
						
						list.add(mybook);
					}
					
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
	
	private ArrayList<Book> list = new ArrayList<Book>();
	
	private class Book{
		String email;
		String name;
		String price;
	}
登录后复制

采用SAXParserFactory:

@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		SAXParserFactory factory = SAXParserFactory.newInstance();

		try {
			SAXParser saxParser = factory.newSAXParser();
			InputStream is = this.getAssets().open("test1.xml", Context.MODE_PRIVATE);
			saxParser.parse(is, new MyDefaultHandler());
		} catch (Exception ex) {

		}
		System.out.println("===size=" + list.size());
		for (int i = 0; i < list.size(); i++) {
			Book book = list.get(i);
			Log.d("TAG", "name=" + book.name + "email=" + book.email);
		}
	}

	protected String getElementName(String name, String qName) {
		if ("".equals(name)) {
			return qName;
		} else {
			return name;
		}
	}

	class MyDefaultHandler extends DefaultHandler {

		private StringBuffer buf;
		private Book mBook;

		public MyDefaultHandler() {
			super();
			mBook = new Book();
		}

		protected StringBuffer getBuffer() {
			return this.buf;
		}

		@Override
		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
			super.startElement(uri, localName, qName, attributes);
			buf = new StringBuffer();
			for (int i = 0; i < attributes.getLength(); i++) {
				String value = attributes.getValue(i);
				mBook.email = value;
			}

		}

		@Override
		public void characters(char[] chars, int start, int length) throws SAXException {
			super.characters(chars, start, length);
			getBuffer().append(chars, start, length);
		}

		@Override
		public void endElement(String uri, String localName, String qName) throws SAXException {
			super.endElement(uri, localName, qName);
			String elementName = getElementName(localName, qName);
			if (elementName.equals("book")) {
				list.add(mBook);
				mBook = new Book();
			} else if (elementName.equals("name")) {
				mBook.name = getBuffer().toString();
			} else if (elementName.equals("price")) {
				mBook.price = getBuffer().toString();
			}

		}

	}

	private ArrayList<Book> list = new ArrayList<Book>();

	private class Book {
		String email;
		String name;
		String price;

		@Override
		public String toString() {
			return "name=" + name + "price=" + price;
		}

	}
登录后复制

 以上就是android如何使用DOM和SAXParserFactory来解析XML文件的内容,更多相关内容请关注PHP中文网(www.php.cn)!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号