android解析xml框架,Android XML文档解析(二)——DOM解析

(二)先看一下DOM解析XML的实际效果图,其效果跟SAX解析是一样的。

(三)工程源码框架

5e2a940aa4b2fc280740ced23f13f62c.png

(1)布局文件main_xml.xml  listview_xml.xml和适配器类MySimpleAdapter都和上篇文章一样,这里就不再给出代码

(2)DOMParseService.java  (核心代码)

package com.laolu.parser;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

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.util.Log;

public class DOMParserService

{

public List> getPersons(InputStream is) throws Exception

{

List> persons=new ArrayList>();

DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();

DocumentBuilder builder =factory.newDocumentBuilder();

Document document = builder.parse(is);

Element root =document.getDocumentElement();

NodeList personNodes=root.getElementsByTagName("person");

for(int i=0;i

{

Map person =new HashMap();

Element personElement =(Element) personNodes.item(i);

String id=personElement.getAttribute("id");

person.put("id", id);

NodeList childNodes =personElement.getChildNodes();

for(int j=0; j

{

if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE)//判断是否为元素

{

if("name".equals(childNodes.item(j).getNodeName().trim()))

{

String name=childNodes.item(j).getFirstChild().getNodeValue();

person.put("name", name);

}else if("sex".equals(childNodes.item(j).getNodeName().trim()))

{

String sex=childNodes.item(j).getFirstChild().getNodeValue();

person.put("sex", sex);

}else if("age".equals(childNodes.item(j).getNodeName().trim()))

{

String age=childNodes.item(j).getFirstChild().getNodeValue();

person.put("age", age);

}

}

}

persons.add(person);

}

is.close();

return persons;

}

}

package com.laolu.main;

import java.io.InputStream;

import java.util.List;

import java.util.Map;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import com.example.xml.R;

import com.laolu.adapter.MySimpleAdapter;

import com.laolu.parser.DOMParserService;

import com.laolu.parser.SAXForHandler;

import android.os.Bundle;

import android.app.Activity;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.TextView;

public class XML_ParseActivity extends Activity

{

private static final String SAX="SAX_Parse";

private static final String DOM="DOM_Parse";

private static final String PULL="Pull_Parse";

ListView listView=null;

InputStream inputStream=null;

SimpleAdapter adapter=null;

List> persons=null;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main_xml);

listView=(ListView) findViewById(R.id.listview);

Button saxButton=(Button) findViewById(R.id.sax_btn);

Button domButton=(Button) findViewById(R.id.dom_btn);

Button pullButton=(Button) findViewById(R.id.pull_btn);

saxButton.setOnClickListener(new MyListener());

domButton.setOnClickListener(new MyListener());

pullButton.setOnClickListener(new MyListener());

//通过类装载器将XML资源加载成java能处理的IO流

inputStream = this.getClass().getClassLoader().getResourceAsStream("laolu_xml.xml");

}

public class MyListener implements OnClickListener

{

@Override

public void onClick(View v)

{

switch (v.getId())

{

case R.id.sax_btn:

break;

case R.id.dom_btn:

try {

updateListViewByDOM();

} catch (Exception e)

{

Log.i(DOM, "DOM Exception!!!");

}

break;

case R.id.pull_btn:

break;

}

}

}

public void updateListViewBySAX() throws Exception //SAX方式

{

SAXForHandler saxForHandler = new SAXForHandler();

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser saxParser = spf.newSAXParser();

saxParser.parse(inputStream, saxForHandler);

persons = saxForHandler.getPersons();

adapter=new MySimpleAdapter(this, persons, R.layout.listview_xml,

new String[]{"id","name","sex","age"}, new int[]{R.id.id,R.id.name,R.id.sex,R.id.age});

listView.setAdapter(adapter);

inputStream.close();

}

public void updateListViewByDOM() throws Exception //DOM方式

{

DOMParserService domParserService=new DOMParserService();

persons=domParserService.getPersons(inputStream);

adapter= new MySimpleAdapter(this, persons, R.layout.listview_xml,

new String[]{"id","name","sex","age"}, new int[]{R.id.id,R.id.name,R.id.sex,R.id.age});

listView.setAdapter(adapter);

inputStream.close();

}

}

http://www.dengb.com/ASPjc/438066.htmlwww.dengb.comtruehttp://www.dengb.com/ASPjc/438066.htmlTechArticle------------------------------------------------------------------------------------------------------ (1)元素:Element 元素是XML的基本构件。元素的子节点可以是...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值