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

时间: 2024-10-13 16:26:53

Android学习笔记之DocumentBuilder的使用....的相关文章

Android学习笔记(四五):互联网通信-HttpClient、XML解析(W3C)

前几日Android发布了4.0 Icecream,昨天上网发现Begining Book中有Edition 3的版本,比对一下,还是有相当的改动,不仅仅增加了tablet的部分,对原有的章节有有一些修订,前后的调整等等.先按Edtion 2的顺序看,相同章节的看Edtion 3,然后回头看Edition 3的Chapter 24.25(E2的36).26.27.28.29.44.45.46.47几个新增章节.同时将模拟器改为Android 2.3的版本,已适应可能新增的改动. 访问Intern

Android学习笔记(四三):文件访问

之前我们学习了通过preference和SQLite数据库进行数据存储,也可以通过文件方式.文件可以是在应用打包时预置,也可以是应用所生成. 文件访问有两种方式:一:静态数据的文件可以防止在res/raw中,这些文件是只读的,只有在应用版本升级的时候进行修改,或者我们先读出这些数据,通过 reference的方式来处理,这样以后可以进行修订,但是这种方式,会有两份数据保存.二:另一种方式是通过URL访问文件,动态数据的读取也可以采用SQLite3的方式. res/raw/下静态文件的读取 在re

Android学习笔记——关于onConfigurationChanged

从事Android开发,免不了会在应用里嵌入一些广告SDK,在嵌入了众多SDK后,发现几乎每个要求在AndroidManifest.xml申明Activity的广告SDK都会要求加上注明这么一句属性: android:configChanges="orientation|keyboard|keyboardHidden" 通过查阅Android API可以得知android:onConfigurationChanged实际对应的是Activity里的onConfigurationChan

Android学习笔记18:自定义Seekbar拖动条式样

Android学习笔记18:自定义Seekbar拖动条式样

Pro Android学习笔记(三三):Menu(4):Alternative菜单

什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件.如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供.我们将相关信息存储在一个intent中,例如该文本的Uri.这个intent可以匹配系统的多个应用,替代菜单将这些应用一一列出,菜单项的title就是该可被调用的activity的名字,图标也为该可被调用的activity的图表. 小例子说明 我们通过一个小例子进行学习,简单地打开一个URL:we

Android学习笔记(二二): 多页显示-Tag的使用

在手机屏幕中,Tab也是比较常用的,通常和List结合,例如我们手机的通信录.下面是Tag的结构. TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout.TabWidget就是每个tab的标签,FrameLayout则是tab内容. 如果我们使用extends TabAcitivty,如同ListActivity,TabHost必须设置为@android:id/tabhost TabWidget必须设置android:id为@android:id/tabs F

android学习笔记--android启动过程之init.rc文件浅析

1.  init.rc文件结构文件位置:init.c  : /system/core/initinit.rc  : /system/core/rootdir 首先init.rc文件是以模块为单位的,每个模块里的内容都是一起执行的,模块分为3种类型:on.service.import.我们可以看下init.rc文件是怎么写的:1.import import /init.usb.rc import /init.${ro.hardware}.rc import /init.trace.rc 上面的内容

android学习笔记——利用BaseAdapter生成40个列表项

RT: main.xml ? 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:orientation="vertical"        

Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>