文章转自:http://blog.sina.com.cn/s/blog_a661f16c0101d5qp.html
People类是自己写的一个类,主要保存各个字符串数据。
由于没学过Xml语法只能依样画葫芦了呗- -
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层标签,只要逻辑上处理得当。(?木有验证)。
音乐路径:
java通过url如何获取网页上的xml文件:
String url = "..................";
URL connect = new URL(url.toString());
URLConnection connection = connect.openConnection();
connection.setDoOutput(true);
OutputStreamWriter paramout = new OutputStreamWriter(connection.getOutputStream());
paramout.write(param.toString());
paramout.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
HttpClient也可以
- Android DOM解析XML方法及优化
在Android应用开发中,我们常常要在应用启动后从服务器下载一些配置文件,这些配置文件包含一些项目中可能用到的资源,这些文件很多情况下是XML文件,这时就要将XML下载到文件中保存,之后再解析XML ...
- Android DOM解析XML示例程序
DOM方式解析xml是先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据的.DOM比较符合人的思维模式,但是其对内存的消耗比较大. activity_main.xml < ...
- Android之DOM解析XML
一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...
- Java从零开始学四十二(DOM解析XML)
一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone ...
- [置顶] Android学习系列-Android中解析xml(7)
Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件. ...
- Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
- Dom 解析XML
xml文件 <?xml version="1.0" encoding="UTF-8"?><data> <book id=&q ...
- JAVA中使用DOM解析XML文件
XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...
- 简单谈谈dom解析xml和html
前言 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.html,xml都是基于这个模型构造的.这也是一个W3C推出的标准.j ...
随机推荐
- svn更改地址怎么办
开发过程中有时会遇到服务器更换地址的情况,比如之前地址是 svn://www.aaa.com 后来换成了 svn://www.bbb.com 这时候怎么办呢?分客户端和服务器端2种情况处理 客户端: ...
- js将数字转换成中文
var _change = { ary0:["零", "一", "二", "三", ...
- OCCI线程安全
线程是任务调度的基本单位,一个进程中可以有多个线程,每个线程有自己的堆栈空间, 进程中的代码段.数据段和堆栈对进程中的线程是可见的.在使用线程时通常都要考虑数据的安全访问. 常用的线程同步方法有: 互 ...
- Java分享笔记:Map集合(接口)的基本方法程序演示
package pack02; import java.util.*; public class MapDemo { public static void main(String[] args) { ...
- Linux帮助都有哪几种,如何使用?
帮助文件有2类,内置命令和外部命令. 其中内置命令就是shell内核自带的,因为shell当中自己要进行管理,那么就需要一些命令进行管理,不同的shell肯定有不同的shell命令,我们用type命令 ...
- 《Linux就该这么学》,刘小伙实在人,给打个广告
本书是由全国多名红帽架构师(RHCA)基于最新Linux系统共同编写的高质量Linux技术自学教程,极其适合用于Linux技术入门教程或讲课辅助教材,目前是国内最值得去读的Linux教材,也是最有价值 ...
- css页面出现滚动条左右跳动
问题描述:页面首次加载的时候内容是一屏,不会出现纵向滚动条,但是当点击加载的内容更多时页面会出现左右跳动一下的情况.出现跳动的主要原因就是出现了滚动条,滚动条的宽度影响了内容区域的宽度. 1.查看导航 ...
- python__系统 : 异步实现以及GIL
创建进程的方式中有个 callback ,也就是回调. 看代码: from multiprocessing import Pool import time import os def test(): ...
- keil5的安装及问题
win8+keil 注意,在进行破解的时候首先要打开一个工程,而且keil要用管理员的身份进行运行, 才可以破解完成 发现打开之后,出现这样的错误. 原因是因为在创建工程的时候在下图中点了是,要点否才 ...
- POJ:2976-Dropping tests(二分平均值)
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15508 Accepted: 5418 Descr ...