日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 创建与解析XML(一)—— 概述

發(fā)布時間:2025/3/15 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 创建与解析XML(一)—— 概述 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Android 是最常用的智能手機平臺,XML 是數(shù)據(jù)交換的標準媒介,Android 中可以使用標準的XML生成器、解析器、轉(zhuǎn)換器 API,對 XML 進行解析和轉(zhuǎn)換。

XML,相關有DOM、SAX、JDOM、DOM4J、Xerces、JAXP等一堆概念,但是很多人總是會弄混他們之間的關系,這對我們理解XML文件的創(chuàng)建和解析很不利。要挑選一個適合在Android平臺上使用的XML解析方案,我們還是得先把這些概念厘清。


XML基本概念

DOM(Document Object Model,文檔對象模型)和SAX(Simple API for XML,簡單XML應用接口),是JAXP(Java API for XML Processing,Java XML處理的應用接口)定義的2種不同的對XML文檔進行分析、處理的方法。

DOM方法是用標準對象模型表示 XML 文檔;SAX方法則使用事件模型來處理程序來處理XML。

JAXP完成了對SAX、DOM的包裝,它向應用程序提供針對DOM的DocumentBuilderFactory、 DocumentBuilder;以及針對SAX的SAXParserFactory、SAXParser抽象工廠類。在Jave SE中JAXP對應javax.xml.parsers包,DOM對應org.w3c.dom,SAX對應org.xml.sax。


Xerces首先繼承并實現(xiàn)了javax.xml.parser包內(nèi)的SAXParser、SAXParserFactory、DocumentBuilder、DocumentBuilderFactory等抽象類,并提供了JAXP中所定義的DOM、SAX(以及StAX,后面會介紹)這些XML解析方法的實現(xiàn)和相應的Parser。

JDOMDOM4J,是因為有人覺得W3C的DOM標準API太過難用而著手開發(fā)的替代API,它們和JAXP一樣都是對DOM、SAX的封裝,不過JDOM、DOM4J做了更多的事情,相當于上面提到JAXP接口+Xerces DOM實現(xiàn)部分。JDOM并沒有自己開發(fā)Parser,所以還是需要利用Xerces的Parser部分,而DOM4J自帶一個名為Alfred2的Parser,當然也可以使用Xerces的Parser。看起來JAXP具備更好的可移植性,即我們可以通過修改配置文件切換不同的DOM實現(xiàn)和SAX、DOM Parser,JDOM、DOM4J雖然也可以切換Parser,但是DOM實現(xiàn)是無法切換的。(參考: Java XML API 漫談? 和 ?JAXP全面介紹)


XML創(chuàng)建與解析

XML創(chuàng)建主要四種方式:Dom、Sax、Pull、Dom4j

XML解析主要四種方式:Dom、Sax、Pull、Dom4j

其中,利用Dom、Sax、Pull、Dom4j創(chuàng)建的標準XML格式文件,可以由任何一種Dom、Sax、Pull、Dom4j解析方式進行解析。


Android中解析XML

DOM解析器,是通過將XML文檔解析成樹狀模型并將其放入內(nèi)存來完成解析工作的,然后對文檔的操作都是在這個樹狀模型上完成的。這個在內(nèi)存中的文檔樹將是文檔實際大小的幾倍。這樣做的好處是結構清晰、操作方便,而帶來的麻煩就是極其耗費系統(tǒng)資源。

SAX解析器,正好克服了DOM的缺點,分析能夠立即開始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應用程序只是在讀取數(shù)據(jù)時檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲在內(nèi)存中,這對于大型文檔來說是個巨大的優(yōu)點。事實上,應用程序甚至不必解析整個文檔,它可以在某個條件得到滿足時停止解析。


DOM與SAX比較

下面的表格列出了SAX和DOM在一些方面的對照:

SAXDOM
順序讀入文檔并產(chǎn)生相應事件,可以處理任何大小的XML文檔在內(nèi)存中創(chuàng)建文檔樹,不適于處理大型XML文檔。
只能對文檔按順序解析一遍,不支持對文檔的隨意訪問。可以隨意訪問文檔樹的任何部分,沒有次數(shù)限制。
只能讀取XML文檔內(nèi)容,而不能修改可以隨意修改文檔樹,從而修改XML文檔。
開發(fā)上比較復雜,需要自己來實現(xiàn)事件處理器。易于理解,易于開發(fā)。
對開發(fā)人員而言更靈活,可以用SAX創(chuàng)建自己的XML對象模型。已經(jīng)在DOM基礎之上創(chuàng)建好了文檔樹。

通過對SAX和DOM的分析,它們各有自己的不同應用領域:

SAX適于處理下面的問題:
  • 對大型文檔進行處理。
  • 只需要文檔的部分內(nèi)容,或者只需要從文檔中得到特定信息。
  • 想創(chuàng)建自己的對象模型的時候。
  • DOM適于處理下面的問題:

  • 需要對文檔進行修改
  • 需要隨機對文檔進行訪問,例如XSLT解析器。

  • DOM和SAX的應用場景
    1、數(shù)據(jù)修改:如果打算對數(shù)據(jù)作出更改并將它輸出為 XML,那么在大多數(shù)情況下,DOM 是適當?shù)倪x擇。并不是說使用 SAX 就不能更改數(shù)據(jù),但是該過程要復雜得多,因為您必須對數(shù)據(jù)的一份拷貝而不是對數(shù)據(jù)本身作出更改。
    2、數(shù)據(jù)容量: 對于大型文件,SAX 是更好的選擇。
    3、數(shù)據(jù)使用:如果只有數(shù)據(jù)中的少量部分會被使用,那么使用 SAX 來將該部分數(shù)據(jù)提取到應用程序中可能更好。 另一方面,如果您知道自己以后會回頭引用已處理過的大量信息,那么 SAX 也許不是恰當?shù)倪x擇。
    4、速度要求: SAX 實現(xiàn)通常要比 DOM 實現(xiàn)速度更快
    基于上面的分析,在基于Android系統(tǒng)的內(nèi)存和CPU資源比較有限的手持設備上,只要我們不需要修改XML數(shù)據(jù)或者隨機的訪問XML數(shù)據(jù),SAX盡管可能需要更多的編碼工作,但是為了更小的內(nèi)存和CPU消耗,還是值得的。

    另外,Android SDK中已經(jīng)包含了JAXP對應的javax.xml.parsers包,SAX對應org.xml.sax,DOM對應的org.w3c.dom包,加上Android還提供了android.sax這樣的包來方便SAX Handle的開發(fā),基于JAXP和SAX這樣的標準方法來開發(fā)不僅復雜度不高,即使出現(xiàn)問題在討論組中尋求解決方案也是比較容易的。(參考: 使用 SAX 處理 XML 文檔 ? 和 ??DOM SAX JAXP DOM4J JDOM xerces解析器)

    Android中解析XML實現(xiàn)

    基于上面的分析,采用JAXP+SAX的方案是我比較看好的。我們首先需要又一個SAXParserFactory的實例,然后從工廠中得到一個SAXParser實例,進而獲取一個XMLReader;接下來新建一個Handler類繼承自SAX Helpler的DefaultHandler,并實現(xiàn)startDocument()、startElement()、endElement()以及endDocument()等方法,并把這個Handler作為XMLReader的Content Handler;最后以帶解析的XML文檔為參數(shù)調(diào)用XMLReader的parse方法即可。具體的代碼參考:Android 上使用 XML ?和 ?Android 3.0 平臺上創(chuàng)建和解析 XML


    1、Android系統(tǒng)中的DOM和SAX實現(xiàn)
    Android SDK中包含了JAXP對應javax.xml.parsers包,SAX對應的org.xml.sax,DOM對應的org.w3c.dom包,所以我們就已經(jīng)有了XML解析所需的JAXP——對SAX和DOM的封裝(抽象類)以及SAX和DOM接口類,但是對于JAXP抽象類的實現(xiàn),以及DOM和SAX接口類的實現(xiàn)在哪里呢?是和Java SE 5.0一樣用了Xerces嗎? 不!
    通過查看Android 1.5的源代碼,我看到這部分的代碼來自Apache Harmony這個開源的Java SE實現(xiàn),位于./dalvik/libcore/xml/src/main/java/org/apache/harmony/xml目錄。這里包含有一個完整的DOM實現(xiàn)(dom目錄),對于javax.xml.parser下的抽象類的實現(xiàn)(parser目錄),以及對于SAX接口類的實現(xiàn)(除此以外還包括對XMLPullParser接口的實現(xiàn))。

    2、XmlPull 和 KXML2
    XmlPull解析器,提供了資源有限的環(huán)境(如J2ME)應用使用的XML解析API,XPP提供了非常簡單的接口——包含一個接口、一個異常、一個建立解析器的factory。它采用了類似JAXP的工廠模式,把接口設計和實現(xiàn)分離,KXML2就是一個為J2ME環(huán)境優(yōu)化的一個實現(xiàn)。在Android SDK中,已經(jīng)包含了XmlPull(org.xmlpull.v1包)以及它的一個AddOn——SAX2 Driver——它使得我們可以通過SAX2的API來操縱XmlPull Parser。另外,通過sourcecode,我們可以看到Android SDK中的XmlPull的實現(xiàn)是KXML2,位于./dalvik/libcore/xml/src/main/java/org/kxml2目錄。Apache Harmony的目錄中同樣有一個ExpatPullParser類實現(xiàn)了XMLPullParser接口,但是卻沒有XmlSerializer接口的實現(xiàn),所以只能說Android中的Harmony也部分實現(xiàn)了XmlPull API。XmlPull+KXML2是下一步我要實踐的方案,到時候還得學習一下如何“公平”的比較兩者的性能。

    3、StAX

    盡管Android中還沒有提供相應的支持,但是Streaming API for XML (StAX) 作為用Java語言處理 XML的最新標準,無論從性能還是可用性上都有出色的表現(xiàn)。它不僅提供了一個快捷、易用、占用內(nèi)存少的 XML 解析器,它還提供了過濾器接口,允許程序員向應用程序業(yè)務邏輯隱藏不需要的文檔細節(jié)。感興趣的朋友可以看一看下面的文章。

    使用 StAX 解析 XML,第 1 部分: Streaming API for XML (StAX) 簡介

    使用 StAX 解析 XML,第 2 部分: 拉式解析和事件

    使用 StAX 解析 XML,第 3 部分: 使用定制事件和編寫 XML



    參考推薦:

    Android中解析XML數(shù)據(jù)

    android解析XML總結(SAX、Pull、Dom三種方式)

    Android 解析XML文件的三種方式 DOM,SAX,PULL

    android解析xml文件的方式(推薦,共三篇)

    ?

    Android 上使用 XML

    Android 上使用 XML 和 JSON

    Android 3.0 平臺上創(chuàng)建和解析 XML


    Android XML解析學習——創(chuàng)建XML(共六篇,推薦


    轉(zhuǎn)載于:https://www.cnblogs.com/springmvc-hibernate/archive/2012/04/25/2484002.html

    總結

    以上是生活随笔為你收集整理的Android 创建与解析XML(一)—— 概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美成人一区二区三区 | 免费无码av片在线观看 | 三级视频在线 | 9人人澡人人爽人人精品 | 色屋永久 | 免费一级特黄特色毛片久久看 | 亚洲激情a | 99久久久无码国产精品性 | 日本黄色美女网站 | 成人欧美一区二区三区小说 | 久久av一区二区三区亚洲 | 国产精品热久久 | 成人在线视频免费看 | 91麻豆一区二区三区 | 欧美日韩高清一区二区 | 欧美在线 | 国产乱人伦精品 | 狠狠操婷婷 | 日日夜夜网站 | 中文字幕第九页 | 国产美女菊爆在线播放APP | 美女又爽又黄免费 | 91精品免费视频 | 国产亚洲女人久久久久毛片 | 国产富婆一级全黄大片 | 久久99精品国产91久久来源 | 精品视频久久久久久久 | 国产精品久久亚洲 | 99riav在线 | 免费播放片大片 | 亚洲精品乱码久久久久久9色 | 天堂…中文在线最新版在线 | 国产精品久久久久久 | 午夜影院免费在线观看 | 亚洲精品乱码久久久久久久久久久久 | 欧美激情视频在线观看 | 中文字幕一区二区三区又粗 | 国产精品片 | 伊人av网 | 麻豆精品91 | 另类在线视频 | 国产又黄又骚 | 欧美日韩国产一区二区 | 成人在线免费 | 国产图区| 欧美少妇在线 | 色91精品久久久久久久久 | 免费成人结看片 | 精品精品精品 | www日| 久久久无码18禁高潮喷水 | 国产极品91 | 91精品国产综合久久久久久 | 免费黄色91| 久久人成 | 四季av国产一区二区三区 | 都市豪门艳霸淫美妇 | xxxx色| 欧美熟妇精品黑人巨大一二三区 | 在线黄色网页 | 日韩一区二区高清视频 | 97xxxxx | 高清欧美精品xxxxx在线看 | 精品久久久久久久久久久久久久久久久久 | 快播在线视频 | 日本欧美一区二区三区不卡视频 | 欧美在线日韩 | 小少妇哺乳喂奶播放 | 国产影视一区二区 | 午夜激情综合 | 亚洲三级成人 | 亚洲精选国产 | 黑料视频在线观看 | www.99热| 一二三区视频 | sm捆绑调教视频 | 男女黄色片 | 69超碰 | 蜜臀av一区二区三区 | 夜色网| 国产欧美视频一区二区 | 性欧美lx╳lx╳ | www亚洲色图 | 久久精品中文闷骚内射 | av涩涩 | 精品国产污污免费网站入口 | 日本欧美在线播放 | 亚洲深夜福利 | 美脚の诱脚舐め脚视频播放 | 奇米777视频 | 紧身裙女教师三上悠亚红杏 | 国内黄色片 | avtt久久| 欧美精品在线第一页 | 日韩免费不卡视频 | 超碰在线日韩 | 精品黑人一区二区三区观看时间 | 青草视频在线观看视频 | 久久aⅴ国产欧美74aaa |