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>
View Code

  我們可以看到文檔中包含了一些文字數據和圖片的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM