Android学习笔记之DocumentBuilder的使用....
PS:当你的才华还撑不起你的野心时,那你需要静下心来学习.....
学习内容:
1.从服务器上获取XML文档...
2.解析XML文档中的内容...
XML文件想必大家都非常的熟悉,可扩展的标记语言,通过节点的方式对数据进行保存,学过HTML的都很清楚,XML文档与其非常的相似(结构上相似而已),因此我们可以把一些数据保存在XML文档当中,然后通过解析XML文档从中获取相关的数据信息...我也就不卖关子了...直接说一下我如何通过XML文档到底做了什么事情吧...就拿Android中的ListView来说吧...Android中自身提供的列表是非常普通的,没有什么样式,而我为每一个列表子选项都设置了一个简单的样式,每一个样式其中有着不同的内容...直接放一张图片吧...

其实就是为了实现上面的效果,因为每一个列表项对应着不同的内容以及图片数据...但是每一个列表项中元素的个数是相同的,并且格式也是相同的...因此我就使用了XML文档来保存了其中的数据信息....下面是xml文档中的数据信息...放置在了一个服务器上...通过http://www.iitbox.com/admin/java_basic.xml可以直接访问到...
<?xml version="1.0" encoding="utf-8"?>
<basic>
<content>
<id>1</id>
<title>Java summary</title>
<artist>Darker</artist>
<duration>34:28</duration>
<thumb_url>http://www.iitbox.com/admin/java_summary.jpg</thumb_url>
</content> <content>
<id>2</id>
<title>Java content introduction</title>
<artist>Darker</artist>
<duration>44:28</duration>
<thumb_url>http://www.iitbox.com/admin/java_content.jpg</thumb_url>
</content> <content>
<id>3</id>
<title>Java Variable</title>
<artist>Darker</artist>
<duration>44:58</duration>
<thumb_url>http://www.iitbox.com/admin/java_Variable.jpg</thumb_url>
</content> <content>
<id>4</id>
<title>Java Operator</title>
<artist>Darker</artist>
<duration>51:25</duration>
<thumb_url>http://www.iitbox.com/admin/java_operator.jpg</thumb_url>
</content> <content>
<id>5</id>
<title>Java flow control</title>
<artist>Darker</artist>
<duration>57:22</duration>
<thumb_url>http://www.iitbox.com/admin/java_flow_control.jpg</thumb_url>
</content> <content>
<id>6</id>
<title>Java Object</title>
<artist>Darker</artist>
<duration>56:41</duration>
<thumb_url>http://www.iitbox.com/admin/java_object.jpg</thumb_url>
</content> <content>
<id>7</id>
<title>Member methods and properties</title>
<artist>Darker</artist>
<duration>59:12</duration>
<thumb_url>http://www.iitbox.com/admin/java_member.jpg</thumb_url>
</content> <content>
<id>8</id>
<title>Java Constructors</title>
<artist>Darker</artist>
<duration>55:16</duration>
<thumb_url>http://www.iitbox.com/admin/java_cons.jpg</thumb_url>
</content> <content>
<id>9</id>
<title>Java this Pointer</title>
<artist>Darker</artist>
<duration>01:02:23</duration>
<thumb_url>http://www.iitbox.com/admin/java_this.jpg</thumb_url>
</content> <content>
<id>10</id>
<title>Java Class Method</title>
<artist>Darker</artist>
<duration>01:09:08</duration>
<thumb_url>http://www.iitbox.com/admin/java_class.jpg</thumb_url>
</content> <content>
<id>11</id>
<title>Java Modifier, Override</title>
<artist>Darker</artist>
<duration>01:08:10</duration>
<thumb_url>http://www.iitbox.com/admin/java_override.jpg</thumb_url>
</content> <content>
<id>12</id>
<title>Java Polymorphism</title>
<artist>Darker</artist>
<duration>37:46</duration>
<thumb_url>http://www.iitbox.com/admin/java_poly.jpg</thumb_url>
</content> <content>
<id>13</id>
<title>Java abstract class and interface</title>
<artist>Darker</artist>
<duration>44:41</duration>
<thumb_url>http://www.iitbox.com/admin/java_interface.jpg</thumb_url>
</content> <content>
<id>14</id>
<title>Java final</title>
<artist>Darker</artist>
<duration>01:13:30</duration>
<thumb_url>http://www.iitbox.com/admin/java_final.jpg</thumb_url>
</content> <content>
<id>15</id>
<title>Some questions</title>
<artist>Darker</artist>
<duration>01:08:00</duration>
<thumb_url>http://www.iitbox.com/admin/java_questions.jpg</thumb_url>
</content> <content>
<id>16</id>
<title>Java array</title>
<artist>Darker</artist>
<duration>56:44</duration>
<thumb_url>http://www.iitbox.com/admin/java_array.jpg</thumb_url>
</content> <content>
<id>17</id>
<title>Java Multidimensional array</title>
<artist>Darker</artist>
<duration>56:44</duration>
<thumb_url>http://www.iitbox.com/admin/java_dimensional.jpg</thumb_url>
</content> <content>
<id>18</id>
<title>Java Bit operation</title>
<artist>Darker</artist>
<duration>43:27</duration>
<thumb_url>http://www.iitbox.com/admin/java_bit.jpg</thumb_url>
</content> <content>
<id>19</id>
<title>Java-Assemble(one)</title>
<artist>Darker</artist>
<duration>44:30</duration>
<thumb_url>http://www.iitbox.com/admin/java_set_1.jpg</thumb_url>
</content> <content>
<id>20</id>
<title>Java-Assemble(two)</title>
<artist>Darker</artist>
<duration>53:41</duration>
<thumb_url>http://www.iitbox.com/admin/java_set_2.jpg</thumb_url>
</content> <content>
<id>21</id>
<title>Java-Assemble(three)</title>
<artist>Darker</artist>
<duration>43:36</duration>
<thumb_url>http://www.iitbox.com/admin/java_set_3.jpg</thumb_url>
</content> <content>
<id>22</id>
<title>Java-Assemble(four)</title>
<artist>Darker</artist>
<duration>10:29</duration>
<thumb_url>http://www.iitbox.com/admin/java_set_4.jpg</thumb_url>
</content> <content>
<id>23</id>
<title>Java-Generic</title>
<artist>Darker</artist>
<duration>50:42</duration>
<thumb_url>http://www.iitbox.com/admin/java_generic_1.jpg</thumb_url>
</content> <content>
<id>24</id>
<title>Java-Expection</title>
<artist>Darker</artist>
<duration>44:48</duration>
<thumb_url>http://www.iitbox.com/admin/java_expection.jpg</thumb_url>
</content> <content>
<id>25</id>
<title>Some questions</title>
<artist>Darker</artist>
<duration>48:22</duration>
<thumb_url>http://www.iitbox.com/admin/java_que.jpg</thumb_url>
</content> <content>
<id>26</id>
<title>Java Graphics(one)</title>
<artist>Darker</artist>
<duration>51:36</duration>
<thumb_url>http://www.iitbox.com/admin/java_graphics.jpg</thumb_url>
</content> <content>
<id>27</id>
<title>Java Graphics(two)</title>
<artist>Darker</artist>
<duration>47:53</duration>
<thumb_url>http://www.iitbox.com/java_graphics.jpg</thumb_url>
</content> <content>
<id>28</id>
<title>Java Event Handling(one)</title>
<artist>Darker</artist>
<duration>01:09:42</duration>
<thumb_url>http://www.iitbox.com/admin/java_event.jpg</thumb_url>
</content> <content>
<id>29</id>
<title>Java Event Handling(two)</title>
<artist>Darker</artist>
<duration>53:39</duration>
<thumb_url>http://www.iitbox.com/admin/java_event.jpg</thumb_url>
</content> <content>
<id>30</id>
<title>Java Event Summary</title>
<artist>Darker</artist>
<duration>53:58</duration>
<thumb_url>http://www.iitbox.com/admin/java_enent.jpg</thumb_url>
</content> <content>
<id>31</id>
<title>Java Thread(one)</title>
<artist>Darker</artist>
<duration>47:51</duration>
<thumb_url>http://www.iitbox.com/admin/java_thread.jpg</thumb_url>
</content> <content>
<id>32</id>
<title>Java Thread(two)</title>
<artist>Darker</artist>
<duration>57:06</duration>
<thumb_url>http://www.iitbox.com/admin/java_thread_1.jpg</thumb_url>
</content> <content>
<id>33</id>
<title>Java Thread(three)</title>
<artist>Darker</artist>
<duration>50:27</duration>
<thumb_url>http://www.iitbox.com/admin/java_thread_2.jpg</thumb_url>
</content> <content>
<id>34</id>
<title>Summary(one)</title>
<artist>Darker</artist>
<duration>55:32</duration>
<thumb_url>http://www.iitbox.com/admin/java_sum.jpg</thumb_url>
</content> <content>
<id>35</id>
<title>Summary(two)</title>
<artist>Darker</artist>
<duration>01:29:00</duration>
<thumb_url>http://www.iitbox.com/admin/java_sum.jpg</thumb_url>
</content> <content>
<id>36</id>
<title>Java-io(one)</title>
<artist>Darker</artist>
<duration>48:34</duration>
<thumb_url>http://www.iitbox.com/admin/java_io_1.jpg</thumb_url>
</content> <content>
<id>37</id>
<title>Java-io(two)</title>
<artist>Darker</artist>
<duration>53:34</duration>
<thumb_url>http://www.iitbox.com/admin/java_io_2.jpg</thumb_url>
</content> <content>
<id>38</id>
<title>Java-io(three)</title>
<artist>Darker</artist>
<duration>49:35</duration>
<thumb_url>http://www.iitbox.com/admin/java_io_3.jpg</thumb_url>
</content> <content>
<id>39</id>
<title>Java-io(four)</title>
<artist>Darker</artist>
<duration>43:35</duration>
<thumb_url>http://www.iitbox.com/admin/java_io_4.jpg</thumb_url>
</content> <content>
<id>40</id>
<title>Summary(one)</title>
<artist>Darker</artist>
<duration>58:47</duration>
<thumb_url>http://www.iitbox.com/admin/java_sum.jpg</thumb_url>
</content> <content>
<id>41</id>
<title>Summary(two)</title>
<artist>Darker</artist>
<duration>47:56</duration>
<thumb_url>http://www.iitbox.com/admin/java_sum.jpg</thumb_url>
</content> <content>
<id>42</id>
<title>Summary(three)</title>
<artist>Darker</artist>
<duration>01:30:32</duration>
<thumb_url>http://www.iitbox.com/admin/java_sum.jpg</thumb_url>
</content> <content>
<id>43</id>
<title>Summary(four)</title>
<artist>Darker</artist>
<duration>11:51</duration>
<thumb_url>http://www.iitbox.com/admin/java_sum.jpg</thumb_url>
</content> <content>
<id>44</id>
<title>Some Questions</title>
<artist>Darker</artist>
<duration>36:17</duration>
<thumb_url>http://www.iitbox.com/admin/java_que.jpg</thumb_url>
</content> <content>
<id>45</id>
<title>Some Questions</title>
<artist>Darker</artist>
<duration>01:19:54</duration>
<thumb_url>http://www.iitbox.com/admin/java_que.jpg</thumb_url>
</content> <content>
<id>46</id>
<title>Java Web</title>
<artist>Darker</artist>
<duration>01:07:26</duration>
<thumb_url>http://www.iitbox.com/admin/java_web.jpg</thumb_url>
</content> <content>
<id>47</id>
<title>Java port.url.socket</title>
<artist>Darker</artist>
<duration>56:32</duration>
<thumb_url>http://www.iitbox.com/admin/java_port.jpg</thumb_url>
</content>
</basic>
我们可以看到文档中包含了一些文字数据和图片的url...但是有了xml文档是仅仅不够的,我们如果想把它展示成Android的列表项的话,我们需要对这个XML文档进行解析,获取其中每一个节点值...然后把所有的节点值放置到每一个列表项上,通过动态加载的方式可以实现所有的样式都会展示在屏幕之上...那么如何解析XML文档呢?这里就需要使用到DocumentBuilder这个类...通过将XML解析成一颗DOM树的形式...然后从这颗DOM树中去获取每一个节点值...首先我们需要从服务器上获取到需要的XML文档...
public String getXmlFromUrl(String url) {
String xml = null;
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient(); //新建HttpClient连接..
HttpPost httpPost = new HttpPost(url); //post方式
HttpResponse httpResponse = httpClient.execute(httpPost);//接收服务器响应信息...
HttpEntity httpEntity = httpResponse.getEntity(); //获取服务器响应后的实体...
xml = EntityUtils.toString(httpEntity); //EntityUtils将响应数据转换成字符串...
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return xml;
}
这里的url就是http://www.iitbox.com/admin/java_basic.xml,通过从服务器上获取到XML文档...获取之后我们需要对XML文档进行解析....下面是解析的过程...这里的解析需要使用到DocumentBuilder这个类...通过DocumentBuilderFactory这个工厂去实例化一个DOM对象...然后获取到DOM解析器....
public Document getDomElement(String xml){
Document doc = null;
//从xml文档中获取DOM的解析器...
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //这里调用DOM工厂...
try {
//从DOM工厂中获取DOM解析器...
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource(); //定义一个xml文档的输入源..
is.setCharacterStream(new StringReader(xml)); //设置输入源的字符流...
doc = db.parse(is); //指定输入源的内容解析成一个XML文档,并返回一个DOM对象...
} catch (ParserConfigurationException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (SAXException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (IOException e) {
Log.e("Error: ", e.getMessage());
return null;
}
return doc;
}
我们可以看到,这里先使用了一个工厂模式...这个工厂去调用这样一个方法....这是api的源码...我们可以看到最终返回的是一个DocumentBuilderFactory对象...英文中的consult怎么翻译都觉得不通顺...感觉通过这个方法,可以不去使用反射机制迅速的能够获取一个class实例...还有一个方法DocumentBuilderFactory newInstance(String,ClassLoader)是调用反射机制的方式获取class属性,最后实例化对象...
/**
* Returns Android's implementation of {@code DocumentBuilderFactory}.
* Unlike other Java implementations, this method does not consult system
* properties, property files, or the services API.
*
* @return a new DocumentBuilderFactory.
*/
public static DocumentBuilderFactory newInstance() {
// instantiate the class directly rather than using reflection
return new DocumentBuilderFactoryImpl();
}
然后返回了这个DocumentBuilderFactory对象之后,通过调用newDocumentBuilder()方法...这里可以从源码得知,通过当前的配置属性,去实例化一个DocumentBuilder对象...最后就得到了DocumentBuilder属性了...
/**
* Creates a new instance of a {@link javax.xml.parsers.DocumentBuilder}
* using the currently configured parameters.
*
* @exception ParserConfigurationException if a DocumentBuilder
* cannot be created which satisfies the configuration requested.
* @return A new instance of a DocumentBuilder.
*/ public abstract DocumentBuilder newDocumentBuilder()
throws ParserConfigurationException;
通过上面的方式我们就拿到了DOM的解析器...拿到了解析器之后,设置其输入源,最后会返回给我们一个解析了XML文档之后的一个DOM对象了...这个DOM对象就是一颗DOM树...它将XML文档中的元素以节点的形式形成了一种树状结构...干脆上一张图片给大家看看...

这就是上面XML文档解析之后从而形成的一颗DOM树状结构...每一个方框都代表着一个元素...也是一个节点...XML被解析成这样的格式...我们通过一些方法就能够从这颗DOM树上获取节点对应的数据信息了...获取数据信息的方式需要使用到NodeList... NodeList其实就是通过DOM树上的每一个节点去获取节点,对节点进行遍历操作,从而获取到数据...在这里我不进行细细的介绍NodeList了...是一个非常容易理解的过程..很简单...我提供了一个代码方便大家去理解....
源码下载:http://files.cnblogs.com/files/RGogoing/sajhkl.zip
Android学习笔记之DocumentBuilder的使用....的更多相关文章
- Android 学习笔记之Volley(七)实现Json数据加载和解析...
学习内容: 1.使用Volley实现异步加载Json数据... Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...
- Android学习笔记进阶之在图片上涂鸦(能清屏)
Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- udacity android 学习笔记: lesson 4 part b
udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- Android学习笔记之Activity详解
1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...
随机推荐
- 统一回复《怎么学JavaScript?》
作者:小不了链接:https://zhuanlan.zhihu.com/p/23265155来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 鉴于时不时,有同学私信问我( ...
- wordpress自动批量定时发布插件 DX-auto-publish
DX-auto-publish是一款wordpress自动发布插件,方便实用. 该wordpress插件的主要功能如下: 1.能够自动批量定时发布wordpress站点的草稿文章,无需每篇文章都手动设 ...
- 一个winform带你玩转rabbitMQ
源码已放出 https://github.com/dubing/MaoyaRabbit 本章分3部分 一.安装部署初探 二.进阶 三.api相关 安装 部署 初探 先上图 一. 安装部署 下载 rab ...
- linux epoll 开发指南-【ffrpc源码解析】
摘要 关于epoll的问题很早就像写文章讲讲自己的看法,但是由于ffrpc一直没有完工,所以也就拖下来了.Epoll主要在服务器编程中使用,本文主要探讨服务器程序中epoll的使用技巧.Epoll一般 ...
- JDBC性能分析与优化
JDBC性能分析与优化V1.0http://www.docin.com/p-758600080.html
- MFC一个类访问另一个类成员对象的成员变量值
MFC中一个类要访问另外一个类的的对象的成员变量值,这就需要获得原来那个类对象的指针,其实有好几种方法都可以实现. 比如维护一个单例模式.设置静态变量等等.我们这里举个列子,实现多个类之间的相互访问. ...
- EvreryDay Collect
1.在使用WebService时我们经常会考虑以下问题:怎么防止别人访问我的WebService? 在System.Net中提供了一个NetworkCredential,只有获得该凭证的用户才能访问相 ...
- SQL调优 - Hints指定索引 解决慢查询案例
背景 每当交易高峰时期,可能会暴露一些平时无法发现的问题,机遇和挑战并存.下面聊聊最近解决的一个案例,因为执行计划走错导致慢查询,进而引发应用线程阻塞.线程池爆满,最后应用功能瘫痪.如何标本兼治的解决 ...
- Spark和hadoop的关系
1. Spark VSHadoop有哪些异同点? Hadoop:分布式批处理计算,强调批处理,常用于数据挖掘和数据分析. Spark:是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速, ...
- failed jobs because of past close date,关工单报错
今天会计反映关不了工单.我们公司关工单的程序是自己开发的,可以整批关.报如下错误.我试着用Standad程序关,可以.看来应该是我们开发的程序有问题.后来发现,是抛到WIP_DJ_CLOSE_TEMP ...