- 相關(guān)推薦
關(guān)于XML的介紹
什么是XML?XML介紹
什么是XML?XML 開(kāi)發(fā)者們會(huì)告訴你,事實(shí)上XML并不是一種語(yǔ)言,而是一種用來(lái)定義其它語(yǔ)言的系統(tǒng)。可能你已經(jīng)聽(tīng)過(guò),或許甚至自己嘗試過(guò)一些這樣的語(yǔ)言??比如微軟為推(push)技術(shù)所推出的頻道定義格式(Channel Definition Format)。W3C是互連網(wǎng)上一些公用標(biāo)準(zhǔn)的開(kāi)發(fā)者,他推出了一系列和XML相關(guān)的標(biāo)準(zhǔn)和草案。他們把XML描敘成“一種用來(lái)表達(dá)結(jié)構(gòu)化數(shù)據(jù)的通用語(yǔ)法”。所謂結(jié)構(gòu)化數(shù)據(jù)是指被標(biāo)簽(tags)定義了其內(nèi)容,意義和用法的數(shù)據(jù)。例如,在HTML的定義中,標(biāo)簽所定義的文本,將會(huì)用一種特定的字體和大小所顯示出來(lái)。一個(gè)XML標(biāo)簽會(huì)明確的確定一種信息: 標(biāo)簽可能表示的是文檔的作者,而則可能包含了產(chǎn)品的價(jià)格。與HTML中標(biāo)簽所不同的是:XML標(biāo)簽的含義是自定義的,如果你愿意,可以用來(lái)表示作者信息,而用來(lái)表示產(chǎn)品價(jià)格。雖然這看起來(lái)會(huì)很別扭,但絕對(duì)是正確的。通過(guò)分離結(jié)構(gòu)和數(shù)據(jù),一份XML文檔能夠一經(jīng)寫(xiě)出,就能應(yīng)用在多種不同的用途:在計(jì)算機(jī)屏幕上顯示出來(lái),或者顯示在手機(jī)屏幕上,又或者被轉(zhuǎn)到為盲人設(shè)計(jì)的語(yǔ)音設(shè)備上,等等,諸多功用,不一而足。它幾乎能夠工作在任何可能的通訊設(shè)備上。這時(shí)候,一個(gè)XML文檔的作用,已經(jīng)遠(yuǎn)遠(yuǎn)超出了當(dāng)初你所以為的那樣,僅僅是用來(lái)顯示內(nèi)容的簡(jiǎn)單文檔了。這樣,XML就能夠在除了互連網(wǎng)的其它地方也能夠一展身手。在一些大型的文檔制作商中,SGML是他們用了很多年的語(yǔ)言www.diannao114.cn,但是它實(shí)在是太復(fù)雜了,僅僅是定義就有400多頁(yè)。XML的出現(xiàn)也為他們創(chuàng)造了一些契機(jī)。事實(shí)上XML是SGML的一個(gè)精簡(jiǎn)了的子集,SGML的大部分工作都可以由XML來(lái)完成,而XML比起SGML來(lái)卻是簡(jiǎn)單了許多。當(dāng)然,平臺(tái)無(wú)關(guān)的XML最初是為Web所設(shè)計(jì)的,它也將在在Web上產(chǎn)生最大的影響。DOM(Domument Object Model)是一個(gè)編程接口,他定義了在一個(gè)文檔中如何進(jìn)行數(shù)據(jù)存取的機(jī)制。XML能夠?yàn)閃eb所做的,很大程度上取決于它是如何同DOM(文檔對(duì)象模型)進(jìn)行交互。使用DOM,程序員可以用一種標(biāo)準(zhǔn)的方法來(lái)動(dòng)態(tài)的操作文檔的內(nèi)容和相關(guān)的一些屬性。換句話(huà)說(shuō),程序員可以讓在一個(gè)瀏覽器的文檔對(duì)象樹(shù)中的一段內(nèi)容進(jìn)行一些特定的動(dòng)作。例如:當(dāng)把鼠標(biāo)移到一小段文字上面時(shí),它會(huì)改變顏色。網(wǎng)景的Navigator和微軟 Internet Explorer都定義了個(gè)不相容的DOM,但是這兩個(gè)公司都宣布在他們下一個(gè)版本的瀏覽器中會(huì)支持W3C的標(biāo)準(zhǔn)DOM。這會(huì)給程序員帶來(lái)很多的方便。
什么是XML?列舉一下你所了解的XML技術(shù)及其應(yīng)用
答:XML即可擴(kuò)展標(biāo)記語(yǔ)言。eXtensibleMarkupLanguage.標(biāo)記是指計(jì)算機(jī)所能理解的信息符號(hào),通過(guò)此種標(biāo)記,計(jì)算機(jī)之間可以處理包含各種信息的文章等。如何定義這些標(biāo)記www.diannao114.cn,即可以選擇國(guó)際通用的標(biāo)記語(yǔ)言,比如HTML,也可以使用象XML這樣由相關(guān)人士自由決定的標(biāo)記語(yǔ)言,這就是語(yǔ)言的可擴(kuò)展性。XML是從SGML中簡(jiǎn)化修改出來(lái)的。它主要用到的有XML、XSL和XPath等。
Android 創(chuàng)建與解析XML(一)—— 概述Android 創(chuàng)建與解析XML(一)—— 概述
Android 是最常用的智能手機(jī)平臺(tái),XML 是數(shù)據(jù)交換的標(biāo)準(zhǔn)媒介,Android 中可以使用標(biāo)準(zhǔn)的XML生成器、解析器、轉(zhuǎn)換器 API,對(duì) XML 進(jìn)行解析和轉(zhuǎn)換。
XML,相關(guān)有DOM、SAX、JDOM、DOM4J、Xerces、JAXP等一堆概念,但是很多人總是會(huì)弄混他們之間的關(guān)系,這對(duì)我們理解XML文件的創(chuàng)建和解析很不利。要挑選一個(gè)適合在Android平臺(tái)上使用的XML解析方案,我們還是得先把這些概念厘清。
XML基本概念DOM(Document Object Model,文檔對(duì)象模型)和SAX(Simple API for XML,簡(jiǎn)單XML應(yīng)用接口),是JAXP(Java API for XML Processing,Java XML處理的應(yīng)用接口)定義的2種不同的對(duì)XML文檔進(jìn)行分析、處理的方法。
DOM方法是用標(biāo)準(zhǔn)對(duì)象模型表示 XML 文檔;SAX方法則使用事件模型來(lái)處理程序來(lái)處理XML。
JAXP完成了對(duì)SAX、DOM的包裝,它向應(yīng)用程序提供針對(duì)DOM的DocumentBuilderFactory、 DocumentBuilder;以及針對(duì)SAX的SAXParserFactory、SAXParser抽象工廠(chǎng)類(lèi)。在Jave SE中JAXP對(duì)應(yīng)javax.xml.parsers包,DOM對(duì)應(yīng)org.w3c.dom,SAX對(duì)應(yīng)org.xml.sax。
Xerces首先繼承并實(shí)現(xiàn)了javax.xml.parser包內(nèi)的SAXParser、SAXParserFactory、DocumentBuilder、DocumentBuilderFactory等抽象類(lèi),并提供了JAXP中所定義的DOM、SAX(以及StAX,后面會(huì)介紹)這些XML解析方法的實(shí)現(xiàn)和相應(yīng)的Parser。JDOM和DOM4J,是因?yàn)橛腥擞X(jué)得W3C的DOM標(biāo)準(zhǔn)API太過(guò)難用而著手開(kāi)發(fā)的替代API,它們和JAXP一樣都是對(duì)DOM、SAX的封裝,不過(guò)JDOM、DOM4J做了更多的事情,相當(dāng)于上面提到JAXP接口+Xerces DOM實(shí)現(xiàn)部分。JDOM并沒(méi)有自己開(kāi)發(fā)Parser,所以還是需要利用Xerces的Parser部分,而DOM4J自帶一個(gè)名為Alfred2的Parser,當(dāng)然也可以使用Xerces的Parser?雌饋(lái)JAXP具備更好的可移植性,即我們可以通過(guò)修改配置文件切換不同的DOM實(shí)現(xiàn)和SAX、DOM Parser,JDOM、DOM4J雖然也可以切換Parser,但是DOM實(shí)現(xiàn)是無(wú)法切換的。(參考: 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)建的標(biāo)準(zhǔn)XML格式文件,可以由任何一種Dom、Sax、Pull、Dom4j解析方式進(jìn)行解析。
Android中解析XML
DOM解析器,是通過(guò)將XML文檔解析成樹(shù)狀模型并將其放入內(nèi)存來(lái)完成解析工作的,然后對(duì)文檔的操作都是在這個(gè)樹(shù)狀模型上完成的。這個(gè)在內(nèi)存中的文檔樹(shù)將是文檔實(shí)際大小的幾倍。這樣做的好處是結(jié)構(gòu)清晰、操作方便,而帶來(lái)的麻煩就是極其耗費(fèi)系統(tǒng)資源。SAX解析器,正好克服了DOM的缺點(diǎn),分析能夠立即開(kāi)始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應(yīng)用程序只是在讀取數(shù)據(jù)時(shí)檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,這對(duì)于大型文檔來(lái)說(shuō)是個(gè)巨大的優(yōu)點(diǎn)。事實(shí)上,應(yīng)用程序甚至不必解析整個(gè)文檔,它可以在某個(gè)條件得到滿(mǎn)足時(shí)停止解析。
DOM與SAX比較
下面的表格列出了SAX和DOM在一些方面的對(duì)照:
SAXDOM順序讀入文檔并產(chǎn)生相應(yīng)事件,可以處理任何大小的XML文檔在內(nèi)存中創(chuàng)建文檔樹(shù),不適于處理大型XML文檔。只能對(duì)文檔按順序解析一遍,不支持對(duì)文檔的隨意訪(fǎng)問(wèn)?梢噪S意訪(fǎng)問(wèn)文檔樹(shù)的任何部分,沒(méi)有次數(shù)限制。只能讀取XML文檔內(nèi)容,而不能修改可以隨意修改文檔樹(shù),從而修改XML文檔。開(kāi)發(fā)上比較復(fù)雜,需要自己來(lái)實(shí)現(xiàn)事件處理器。易于理解,易于開(kāi)發(fā)。對(duì)開(kāi)發(fā)人員而言更靈活,可以用SAX創(chuàng)建自己的XML對(duì)象模型。已經(jīng)在DOM基礎(chǔ)之上創(chuàng)建好了文檔樹(shù)。通過(guò)對(duì)SAX和DOM的分析,它們各有自己的不同應(yīng)用領(lǐng)域:
SAX適于處理下面的問(wèn)題:對(duì)大型文檔進(jìn)行處理。只需要文檔的部分內(nèi)容,或者只需要從文檔中得到特定信息。想創(chuàng)建自己的對(duì)象模型的時(shí)候。DOM適于處理下面的問(wèn)題:
需要對(duì)文檔進(jìn)行修改需要隨機(jī)對(duì)文檔進(jìn)行訪(fǎng)問(wèn),例如XSLT解析器。
DOM和SAX的應(yīng)用場(chǎng)景
1、數(shù)據(jù)修改:如果打算對(duì)數(shù)據(jù)作出更改并將它輸出為 XML,那么在大多數(shù)情況下,DOM 是適當(dāng)?shù)倪x擇。并不是說(shuō)使用 SAX 就不能更改數(shù)據(jù),但是該過(guò)程要復(fù)雜得多,因?yàn)槟仨殞?duì)數(shù)據(jù)的一份拷貝而不是對(duì)數(shù)據(jù)本身作出更改。
2、數(shù)據(jù)容量: 對(duì)于大型文件,SAX 是更好的選擇。
3、數(shù)據(jù)使用:如果只有數(shù)據(jù)中的少量部分會(huì)被使用,那么使用 SAX 來(lái)將該部分?jǐn)?shù)據(jù)提取到應(yīng)用程序中可能更好。 另一方面,如果您知道自己以后會(huì)回頭引用已處理過(guò)的大量信息,那么 SAX 也許不是恰當(dāng)?shù)倪x擇。
4、速度要求: SAX 實(shí)現(xiàn)通常要比 DOM 實(shí)現(xiàn)速度更快。基于上面的分析,在基于Android系統(tǒng)的內(nèi)存和CPU資源比較有限的手持設(shè)備上,只要我們不需要修改XML數(shù)據(jù)或者隨機(jī)的訪(fǎng)問(wèn)XML數(shù)據(jù),SAX盡管可能需要更多的編碼工作,但是為了更小的內(nèi)存和CPU消耗,還是值得的。另外,Android SDK中已經(jīng)包含了JAXP對(duì)應(yīng)的javax.xml.parsers包,SAX對(duì)應(yīng)org.xml.sax,DOM對(duì)應(yīng)的org.w3c.dom包,加上Android還提供了android.sax這樣的包來(lái)方便SAX Handle的開(kāi)發(fā),基于JAXP和SAX這樣的標(biāo)準(zhǔn)方法來(lái)開(kāi)發(fā)不僅復(fù)雜度不高,即使出現(xiàn)問(wèn)題在討論組中尋求解決方案也是比較容易的。(參考: 使用 SAX 處理 XML 文檔 和 DOM SAX JAXP DOM4J JDOM xerces解析器)Android中解析XML實(shí)現(xiàn)
基于上面的分析,采用JAXP+SAX的方案是我比較看好的。我們首先需要又一個(gè)SAXParserFactory的實(shí)例,然后從工廠(chǎng)中得到一個(gè)SAXParser實(shí)例,進(jìn)而獲取一個(gè)XMLReader;接下來(lái)新建一個(gè)Handler類(lèi)繼承自SAX Helpler的DefaultHandler,并實(shí)現(xiàn)startDocument()、startElement()、endElement()以及endDocument()等方法,并把這個(gè)Handler作為XMLReader的Content Handler;最后以帶解析的XML文檔為參數(shù)調(diào)用XMLReader的parse方法即可。具體的代碼參考:Android 上使用 XML 和 Android 3.0 平臺(tái)上創(chuàng)建和解析 XML
1、Android系統(tǒng)中的DOM和SAX實(shí)現(xiàn)Android SDK中包含了JAXP對(duì)應(yīng)javax.xml.parsers包,SAX對(duì)應(yīng)的org.xml.sax,DOM對(duì)應(yīng)的org.w3c.dom包,所以我們就已經(jīng)有了XML解析所需的JAXP——對(duì)SAX和DOM的封裝(抽象類(lèi))以及SAX和DOM接口類(lèi),但是對(duì)于JAXP抽象類(lèi)的實(shí)現(xiàn),以及DOM和SAX接口類(lèi)的實(shí)現(xiàn)在哪里呢?是和Java SE 5.0一樣用了Xerces嗎? 不!通過(guò)查看Android 1.5的源代碼,我看到這部分的代碼來(lái)自Apache Harmony這個(gè)開(kāi)源的Java SE實(shí)現(xiàn),位于./dalvik/libcore/xml/src/main/java/org/apache/harmony/xml目錄。這里包含有一個(gè)完整的DOM實(shí)現(xiàn)(dom目錄),對(duì)于javax.xml.parser下的抽象類(lèi)的實(shí)現(xiàn)(parser目錄),以及對(duì)于SAX接口類(lèi)的實(shí)現(xiàn)(除此以外還包括對(duì)XMLPullParser接口的實(shí)現(xiàn))。2、XmlPull 和 KXML2XmlPull解析器,提供了資源有限的環(huán)境(如J2ME)應(yīng)用使用的XML解析API,XPP提供了非常簡(jiǎn)單的接口——包含一個(gè)接口、一個(gè)異常、一個(gè)建立解析器的factory。它采用了類(lèi)似JAXP的工廠(chǎng)模式,把接口設(shè)計(jì)和實(shí)現(xiàn)分離,KXML2就是一個(gè)為J2ME環(huán)境優(yōu)化的一個(gè)實(shí)現(xiàn)。在Android SDK中,已經(jīng)包含了XmlPull(org.xmlpull.v1包)以及它的一個(gè)AddOn——SAX2 Driver——它使得我們可以通過(guò)SAX2的API來(lái)操縱XmlPull Parser。另外,通過(guò)sourcecode,我們可以看到Android SDK中的XmlPull的實(shí)現(xiàn)是KXML2,位于./dalvik/libcore/xml/src/main/java/org/kxml2目錄。Apache Harmony的目錄中同樣有一個(gè)ExpatPullParser類(lèi)實(shí)現(xiàn)了XMLPullParser接口,但是卻沒(méi)有XmlSerializer接口的實(shí)現(xiàn),所以只能說(shuō)Android中的Harmony也部分實(shí)現(xiàn)了XmlPull API。XmlPull+KXML2是下一步我要實(shí)踐的方案,到時(shí)候還得學(xué)習(xí)一下如何“公平”的比較兩者的性能。3、StAX盡管Android中還沒(méi)有提供相應(yīng)的支持,但是Streaming API for XML (StAX) 作為用Java語(yǔ)言處理 XML的最新標(biāo)準(zhǔn),無(wú)論從性能還是可用性上都有出色的表現(xiàn)。它不僅提供了一個(gè)快捷、易用、占用內(nèi)存少的 XML 解析器,它還提供了過(guò)濾器接口,允許程序員向應(yīng)用程序業(yè)務(wù)邏輯隱藏不需要的文檔細(xì)節(jié)。感興趣的朋友可以看一看下面的文章。
使用 StAX 解析 XML,第 1 部分: Streaming API for XML (StAX) 簡(jiǎn)介
使用 StAX 解析 XML,第 2 部分: 拉式解析和事件
使用 StAX 解析 XML,第 3 部分: 使用定制事件和編寫(xiě) XML
XML的國(guó)際化問(wèn)題
XML的國(guó)際化問(wèn)題XML的出現(xiàn),使得網(wǎng)站的國(guó)際化變得空前的容易。和Java一樣,XML也是使用的Unicode(ISO 10646)作為其編碼標(biāo)準(zhǔn),這是的網(wǎng)站建設(shè)者們能夠很容易的寫(xiě)出各國(guó)的文字和符號(hào),而不必過(guò)多的擔(dān)心亂碼的問(wèn)題。Unicode 包括了所有的ASCII字符,以及簡(jiǎn)體中文,繁體中文,日文,韓文,希臘文等等。在XML中甚至可以允許有混合的編碼出現(xiàn),例如,一個(gè)顯示中文的網(wǎng)頁(yè)可以引用一個(gè)德文的單詞,而不必?fù)?dān)心出現(xiàn)亂碼。開(kāi)發(fā)者不需要專(zhuān)門(mén)為了Unicode而在去學(xué)習(xí)什么新的東西,網(wǎng)頁(yè)一經(jīng)寫(xiě)好后,在客戶(hù)端的瀏覽器中顯示時(shí),瀏覽器會(huì)自動(dòng)的使用合適的字符集把網(wǎng)頁(yè)顯示出來(lái)。
XML對(duì)于超鏈接有那些改進(jìn)?
XML對(duì)于超鏈接有那些改進(jìn)?XML對(duì)HTML的超鏈接做了一些改進(jìn),增加了一些特性,包括能夠建立“智能”鏈接,可以省去不少手工編寫(xiě)JavsScript的麻煩。在XML中,鏈接是作為一個(gè)對(duì)象出現(xiàn)的,可以向操作任何的其它對(duì)象那樣,對(duì)超鏈接進(jìn)行方便的操作。原來(lái)的關(guān)于鏈接的的標(biāo)準(zhǔn)??XLL,XML鏈接語(yǔ)言(XML Linking Language)現(xiàn)在被分為兩種新的標(biāo)準(zhǔn):Xpointer和XLink.Xpointer:在HTML中,可以通過(guò)書(shū)簽鏈接到一個(gè)頁(yè)面的任何地方。通過(guò)Xpointer你將能夠“尋址到(address to)”(而不是“鏈接到(link to)”)其他頁(yè)面的任何一部分的內(nèi)容。顯然的,這對(duì)于在文檔引用方面是非常有用的。Xlink:當(dāng)用戶(hù)點(diǎn)擊了HTML中的一個(gè)超鏈接后,當(dāng)前的網(wǎng)頁(yè)被一個(gè)新的網(wǎng)頁(yè)所替代。Xlink能夠讓W(xué)eb開(kāi)發(fā)者為鏈接這個(gè)對(duì)象添加一些動(dòng)作(behaviors)。例如:在現(xiàn)在你必須用JavaScript來(lái)實(shí)現(xiàn)把鏈接的網(wǎng)頁(yè)在一個(gè)新的窗口中顯示出來(lái),但Xlink通過(guò)給鏈接對(duì)象添加了一些行為,實(shí)現(xiàn)彈出窗口容易到只是簡(jiǎn)單的調(diào)用對(duì)象的方法而已。其他的一些有用的應(yīng)用,像彈出的警告對(duì)話(huà)框,需要用戶(hù)做出確認(rèn)的對(duì)話(huà)框等等,通過(guò)Xlink的對(duì)象機(jī)制都可以很容易地實(shí)現(xiàn)。但現(xiàn)在,我們還都必須求助于腳本編程采能夠解決。對(duì)于一系列相關(guān)的鏈接,XML能夠讓W(xué)eb開(kāi)發(fā)者創(chuàng)建擴(kuò)展鏈接(Extended Links)來(lái)方便的實(shí)現(xiàn)像www.webring.com這樣的網(wǎng)站或網(wǎng)頁(yè),把一些相同主題的網(wǎng)頁(yè)自動(dòng)的鏈接在一起,F(xiàn)在實(shí)現(xiàn)這個(gè)功能需要使用到CGI腳本,但是擴(kuò)展鏈接將提供標(biāo)準(zhǔn)的方法來(lái)建立資源之間的關(guān)聯(lián),F(xiàn)在還有一些問(wèn)題需要得到進(jìn)一步的討論,特別是在“行為”機(jī)制方面還有一些工作要作。但這并不妨礙在不久的將來(lái),Xpinter和Xlink作為新的標(biāo)準(zhǔn)被廣泛使用。
【XML的介紹】相關(guān)文章:
關(guān)于IBM XML認(rèn)證考試的要點(diǎn)01-13
XML語(yǔ)言在網(wǎng)頁(yè)中有哪些應(yīng)用07-25
IBM XML認(rèn)證知識(shí)點(diǎn):Dtd09-01
關(guān)于XML方面的面試題及答案05-30
關(guān)于XML技術(shù)在數(shù)據(jù)交換中的應(yīng)用09-28
自我介紹與介紹別人的禮儀08-28
葉公好龍的英文介紹08-20
話(huà)劇術(shù)語(yǔ)介紹05-04