android sax dom的区别,android使用DOM和SAXParserFactory来解析XML文件的方法

android使用DOM和SAXParserFactory来解析XML文件的方法

发布时间:2020-08-21 11:21:41

来源:亿速云

阅读:68

作者:小新

这篇文章给大家分享的是有关android使用DOM和SAXParserFactory来解析XML文件的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

对于以下的xml文件:<?xml version="1.0" encoding="UTF-8"?>

rjzjh

jjjjjj

bbbb

ccc

这样来解析: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

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) {

//这里才表示这个是节点

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 list = new ArrayList();

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 list = new ArrayList();

private class Book {

String email;

String name;

String price;

@Override

public String toString() {

return "name=" + name + "price=" + price;

}

}

感谢各位的阅读!关于android使用DOM和SAXParserFactory来解析XML文件的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值