Android Xml解析之DOM详细攻略

参考地址:http://wenku.baidu.com/view/aca83d12cc7931b765ce15d1.html

由于dom方式是保存于内存中,比较耗内存,不过对于一些数据量比较小但又比较常用的隐秘信息,可以用此方法

People类是自己写的一个类,主要保存各个字符串数据。

1.为了具有扩展性 自己编了一个xml文件:

<?xml version="1.0" encoding="utf-8"?>

<peoples>

<people

name="谢XX" age="23" >aaaaaaaaa

<nationality>中国 </nationality>

<graduation>XXX大学</graduation>

<introduction name="介绍">谢XX测试描述的句子长长。。。。。。 </introduction>

</people>

<people

name="王XX"age="23" >bbbbbbbb

<nationality>中国</nationality>

<graduation>XX大学</graduation>

<introduction>王XX测试描述的句子</introduction>

</people>

<people

name="林XX" age="23" >cccccccc

<nationality>中国</nationality>

<graduation>理工大学</graduation>

<introduction>林XX测试描述的句子</introduction>

</people>

</peoples>

总结:有点像是树形结构。

2.关键解析部分代码:

(1)声明各种需要的类:

DocumentBuilderFactory factory = null;

DocumentBuilder builder = null;

Document document = null;

InputStream inputStream = null;

(2)实现DOM解析

list = new ArrayList<People>();

factory = DocumentBuilderFactory.newInstance();

try {

//惯例 取得document文件实例的过程

builder = factory.newDocumentBuilder();

inputStream = XmlMainActivity.this.getResources()

.getAssets().open("test.xml");//以工程文件下assets文件夹为根目录

document = builder.parse(inputStream);

//取得根Element 以此列出所有节点NodeList

Element root = document.getDocumentElement();

//getElementsByTagName是在当前的Element 下查找"people"标志并生成NodeList

NodeList nodes = root.getElementsByTagName_r("people");

//取出每个节点中的数据,这里应该分成3种数据,

//①是name、age那样的Attribute数据;

//②是在<people>括号外的NodeValue数据;

//③最后是在其地下的另一个node数据节点。

for (int i = 0; i < nodes.getLength(); i++) {

Element peopleitem = (Element) nodes.item(i);

name = peopleitem.getAttribute("name");

age = peopleitem.getAttribute("age");

// introduction=peopleitem.getFirstChild().getNodeValue();

Element item = (Element) peopleitem

.getElementsByTagName_r("nationality").item(0);

nationality = item.getFirstChild().getNodeValue();

item = (Element) peopleitem.getElementsByTagName_r(

"graduation").item(0);

graduation = item.getFirstChild().getNodeValue();

item = (Element) peopleitem.getElementsByTagName_r(

"introduction").item(0);

introduction =item.getFirstChild().getNodeValue();

// NodeList childenodes=peopleitem.getElementsByTagName_r("introduction");

// Element childitem=(Element) childenodes.item(0);

// introduction=childitem.getAttribute("name");

// introduction=introduction+"   "+childitem.getFirstChild().getNodeValue();

list.add(new People(name, age, nationality, graduation,

introduction, XmlMainActivity.this));

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

根据粗俗的理解:DOM解析过程有点像树遍历过程,

①取得根节点Element root =document.getDocumentElement();

②取得所有节点列表NodeList nodes = root.getElementsByTagName_r("people");

③取得第i个子节点Element peopleitem = (Element) nodes.item(i);

④取得第i个子节点的Attribute数据、NodeValue数据

⑤列出第i个子节点的"introduction"子节点NodeList childenodes=peopleitem.getElementsByTagName_r("introduction");

⑥重复③④步骤;

⑦列出第i个子节点的"nationality"子节点NodeList。

⑧重复③④步骤;

...

⑨取得根目录下第i+1个子节点Element peopleitem = (Element) nodes.item(i);

再重复

xml虽然复杂了点 但是画下图还是很好搞的。

element和document继承Node接口

nodelist本身只是一个接口

document本身代表整个xml文件,element代表某个节点,其中由document.getDocumentElement()取得的element为根节点,

然后从根节点调用root.getElementsByTagName_r("people");可以取得不同标签下的所有Nodelist,

再取得(Element) nodelist.item(i);子节点

最后可以再再该子节点下调用getElementsByTagName。

整个解析过程可以不按照xml固有的层级关系,即可以直接从根节点下寻找第N层标签,只要逻辑上处理得当。

Android Xml解析之DOM详细攻略

时间: 2024-12-05 17:09:53

Android Xml解析之DOM详细攻略的相关文章

fiddler Android下https抓包全攻略

fiddler Android下https抓包全攻略 fiddler的http.https的抓包功能非常强大,可非常便捷得对包进行断点跟踪和回放,但是普通的配置对于像招商银行.支付宝.陌陌这样的APP是抓不到包的,需要一些特殊的配置,本文把fiddler Android下https抓包的详细配置都罗列出来,供大家参考. 一.普通https抓包设置 先对Fiddler进行设置: 勾选“CaptureHTTPS CONNECTs”,接着勾选“Decrypt HTTPS traffic”.同时,由于我

Android xml 解析

XML 常用的三种解析方式: DOM: 全部加载到内存,生成一个树状结构,占用内存比较大. SAJ: 采用事件驱动,速度快,效率高,不支持回退. PULL:也是采用事件驱动,语法简洁. 步骤: 1. 创建XML 解析器:XmlPullParser parser = Xml.newPullParser(); 2. 配置解析器:parser.setInput(is, "utf-8");// 参数为 xml 文件输入流 和 编码方式. 3. 根据事件进行解析. int type = pars

android XML解析器全解案例

1.使用pull解析 1 package com.example.myxml; 2 3 import java.io.InputStream; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 import org.xmlpull.v1.XmlPullParser; 8 import org.xmlpull.v1.XmlPullParserFactory; 9 10 import android.util.Log; 11 imp

android xml解析

android xml 解析 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式. SAX特点: 解析方式是一种基于事件驱动的,消耗的内存少 Pull特点: 解析方式是一种基于事件驱动的,消耗的内存少,在android系统内部的xml解析都是用这种方式 Dom特点: dom是把全部文件读入到内存中,这种方式很消耗内存,对于内存资源本来就很少的android手机,这种 方式不太建议使用. 个人建议:  SAX和pull都比较适合mo

Android] Android XML解析学习——方式比较

[Android] Android XML解析学习——方式比较 (ZT) 分类: 嵌入式 (From:http://blog.csdn.net/ichliebephone/article/details/5981913) 一.基础知识 经过这段时间的学习,我们已经了解了Android平台上用于解析XML的三种方式:SAX.DOM和Pull.并且在学习的过程中也介绍了这三种方式各自的特点及适合的使用场合,简单的来说,DOM方式最直观和容易理解,但是只适合XML文档较小的时候使用,而SAX方式更适合

android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三: 把复杂对象转换成 xml android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象 android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的

android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml android XMl 解析神奇xstream 三: 把复杂对象转换成 xml 1.文件准备 把一个预先写好的xml文件放在android项目目录的 asset 文件夹. 文件内容为: <blog> <age>30</age> <

android XMl 解析神奇xstream 三: 把复杂对象转换成 xml

前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xstream 二: 把对象转换成xml 1.JavaBeen package com.android10; public class Person { String pName ; String pAge ; public String getpName() { return pName; } pub

android XMl 解析神奇xstream 二: 把对象转换成xml

前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 package com.android10; public class Product { private String name ; private String age ; public String getName() { return name; } public void setName(Strin