XML入門教程:分析XM
互聯(lián)網(wǎng) 發(fā)布時(shí)間:2009-04-02 20:59:37 作者:佚名
我要評論

分析XML文檔可通過程序來做,分析器有兩大類,一種是事件驅(qū)動(dòng)的,一種是基于樹模型的。
分析XML文檔可通過程序來做,分析器有兩大類,一種是事件驅(qū)動(dòng)的,一種是基于樹模型的。
使用事件驅(qū)動(dòng)的分析器時(shí),每
分析XML文檔可通過程序來做,分析器有兩大類,一種是事件驅(qū)動(dòng)的,一種是基于樹模型的。
分析XML文檔可通過程序來做,分析器有兩大類,一種是事件驅(qū)動(dòng)的,一種是基于樹模型的。
使用事件驅(qū)動(dòng)的分析器時(shí),每遇到一個(gè)元素就會觸發(fā)一個(gè)事件,由事件處理器進(jìn)行處理。事件分析器按順序讀取XML文檔,而不把整個(gè)文檔讀入內(nèi)存,所以處理速度很快。但缺點(diǎn)是由于要從頭到尾讀取XML文檔,因此無法在XML文檔中移動(dòng)位置。事件驅(qū)動(dòng)分析器適合處理其它地方使用的XML數(shù)據(jù),如轉(zhuǎn)換成HTML文檔或從文件中讀取數(shù)據(jù)并插入數(shù)據(jù)庫中。它的優(yōu)點(diǎn)有:
文件搜索,從XML文檔中搜索需要的標(biāo)志或數(shù)據(jù);
格式轉(zhuǎn)換,如轉(zhuǎn)換成HTML。任何需將原始XML轉(zhuǎn)換成另一種格式的工作都最好使用事件驅(qū)動(dòng)分析器來完成,因?yàn)樗蓜?dòng)態(tài)將信息轉(zhuǎn)換成新格式。
少量修改,你可用事件驅(qū)動(dòng)分析器讀取和重新生成XML。在分析過程中,可以改變少量的單語、字符數(shù)據(jù)內(nèi)容或重新構(gòu)造XML。事件驅(qū)動(dòng)分析器特別適合整理和重新格式化XML文檔。
簡單驗(yàn)證,由于整個(gè)文檔不在內(nèi)存中,所以無法進(jìn)行完整驗(yàn)證,但可檢查拼寫錯(cuò)誤和一般良構(gòu)XML文檔之類的簡單問題;
建立內(nèi)部結(jié)構(gòu),可以使用事件驅(qū)動(dòng)分析器建立XML文檔的復(fù)雜內(nèi)部表示,如基于樹的接口使用的樹式結(jié)構(gòu)。
基于樹的分析器把整個(gè)XML文檔讀入內(nèi)存,并生成樹狀結(jié)構(gòu)。分析器可隨機(jī)訪問樹中的任意節(jié)點(diǎn),并能修改樹結(jié)構(gòu)和內(nèi)容。
1.分析器工具
現(xiàn)有的分析器種類有上百種,但常用的是兩個(gè)標(biāo)準(zhǔn)的工具庫,一個(gè)是XML簡單API(SAX,Simple API for XML)和文檔對象模型(DOC,Document Object Model)。SAX是事件驅(qū)動(dòng)分析器的標(biāo)準(zhǔn),而DOM是基于樹的分析器標(biāo)準(zhǔn)。另外,Expat雖然不是標(biāo)準(zhǔn),但它是腳本語言中處理XML時(shí)最常用的分析器。Expat由James Clark編寫,是事件驅(qū)動(dòng)分析器。
本文由腳本之家(http://www.dbjr.com.cn)整理發(fā)布!轉(zhuǎn)載請注明出處,謝謝!
2.Unicode
計(jì)算機(jī)并不能正真理解文本內(nèi)容,它無法識別諸如a,b,c這類的字母,更不用說中文了。計(jì)算機(jī)所能理解的只有數(shù)字,如60,80等。字符集(character set)規(guī)定了字母到數(shù)字的映射關(guān)系,如65代表大寫字母A。65稱為碼點(diǎn)(code point),字符編碼(character encoding)決定碼點(diǎn)如何用字節(jié)表示。是用多了節(jié)還是單字節(jié),高字節(jié)位表示什么,低字節(jié)位表示什么。
不同國家使用不同的語言,不同程序使用不同的編碼規(guī)范,在進(jìn)行世界范圍內(nèi)的數(shù)據(jù)交換就要統(tǒng)一表示數(shù)據(jù)的字符編碼規(guī)范。傳統(tǒng)的ASCII字符集只定義了127個(gè)字符,其中前31個(gè)是控制符。127位之后的字符隨平臺不同而不同。大多數(shù)平臺只能表示前127位,單字節(jié)(8位),使得字符集中最多只能提供256個(gè)字符。這些標(biāo)準(zhǔn)字符稱為羅馬或拉丁字符集,用ASCII來表示中文、日文是遠(yuǎn)遠(yuǎn)不夠的。
為了解決字符集問題,出現(xiàn)了Unicode字符集。它可用多字節(jié)格式編碼字符,目前標(biāo)準(zhǔn)允許2字節(jié)字符,支持65536個(gè)不同字符。標(biāo)準(zhǔn)的Unicode字符集為Latin-1(或ISO-8859-1)。有關(guān)Unicode的介紹可訪問Unicode的官方網(wǎng)站:http://www.unicode.org
Unicode字符集為字符分配碼點(diǎn),即編號。這些編號可以用多種模式編碼,如UCS-2、UCS-4、UTF-8、UTF-16。
UCS-2,也叫ISO-10646-UCS-2。每個(gè)字符用一個(gè)0~65535之間的兩個(gè)字節(jié)的無符號整數(shù)表示。如A的Unicode碼點(diǎn)為65,用兩個(gè)字節(jié)00和41(十六進(jìn)制)表示。B的Unicode碼點(diǎn)為66,用兩個(gè)字節(jié)00和42表示。UCS-2有兩種形式:高字節(jié)(#x0041)在前和低字節(jié)(#x4100)在前。為區(qū)發(fā)高低位不同表示形式,采用UCS-2編碼文檔通常以Unicode字符#xFEFF(零寬度無間斷空格)開頭,一般稱為字節(jié)順序標(biāo)記(byte order mark)。這個(gè)字符是不可見的。如果兩個(gè)字節(jié)交換位置,得到的字符#xFFFE實(shí)際是不存在的。因此中通過查看UCS-2文檔的前兩個(gè)字符是#xFEFF還是#xFFFE,就可確定該文檔是否是高字節(jié)在前。UCS-2的缺點(diǎn):如果文本字符主要是拉丁文,由于采用兩個(gè)字節(jié),字符集編碼是單字節(jié)字符編碼的兩倍;UCS-2不能與ASCII向前或向后兼容,用于單字節(jié)字符集的工具常常不適用于處理UCS-2編碼文件。
UTF-8是一種可這長度的Unicode編碼。0~127為ASCII碼字符集,與ASCII編碼完全兼容,每個(gè)字符采用一個(gè)字節(jié)編碼。UTF-8用兩個(gè)字節(jié)表示128~2047,該范圍覆蓋了最常見的非表意字母。其余的字符,主要來自漢語、日語和韓語,每個(gè)都用3個(gè)字節(jié)表示。如果Unicode的碼點(diǎn)超過65535個(gè)字符,那么這些字符就會用4個(gè)字節(jié)編碼。對于以拉丁文為主的文件,使用UTF-8比UCS-2可減少一半的文件大小。對于漢語、日語和韓語的文件,其大小會增加百分之五十。對于其它語言,文件大小相差不大。UTF-8是最常用的Unicode編碼方式。
在Unicode流行以前,出現(xiàn)了一系列處理特定語言的單字節(jié)字符集,ISO將14種這樣的字符集標(biāo)準(zhǔn)化成ISO 8859標(biāo)準(zhǔn),分別是ISO-8859-1~14。ISO-8859-15是ISO-8859-1的修訂版本。這些字符集統(tǒng)稱ISO字符集。
Cp1252是依賴于Windows平臺的一種編碼,是Windows的缺省字符集。該種編碼不支持跨平臺特性,盡量不要使用。
MacRoman是Mac OS使用的一種非標(biāo)準(zhǔn)、單字節(jié)編碼。在非Mac平臺下使用也會有問題,盡量不要使用。
本文由腳本之家(http://www.dbjr.com.cn)整理發(fā)布!轉(zhuǎn)載請注明出處,謝謝!
在XML文檔中,如果需輸入編輯器不支持的字符,我們可用字符引用的方式,以十進(jìn)制或十六進(jìn)制給出它所代表的Unicode字符編號,如њ(十進(jìn)制)或者њ(十六進(jìn)制)。字符引用可用于元素內(nèi)容、屬性和注釋,不能用于元素名和屬性名、處理指令或XML關(guān)鍵字。如果有一些字符需經(jīng)常使用,則我們可為這些字符定義實(shí)體,這樣,在文檔中就可方便地引用該實(shí)體了。專門定義字符實(shí)體的DTD我們可獨(dú)立出來,形成以.ent為后綴的外部DTD。在需要時(shí)使用外部參數(shù)實(shí)體引用將這些定義引入文檔的DTD中。
XHTML 1.0 DTD包含有三個(gè)有用的字符引用實(shí)體可在文檔中使用。
Latin-1字符,http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
ISO-8859-1中自160以上的非ASCII碼字符。
特殊字符,http://www.w3.org/TR/xhtml/DTD/xhtml-special.ent
ISO-8859-2中不在Latin-1中的字母。
標(biāo)點(diǎn)符號,http://www.w3.org/TR/xhtml-symbol.ent
希臘字母表(不包含帶重音的字符)和各種標(biāo)點(diǎn)符號、數(shù)學(xué)運(yùn)算符及其他數(shù)學(xué)中常用的符號。
在XML文檔中可以使用xml:lang屬性規(guī)定元素內(nèi)容采用的語言。這樣就可在一篇文檔中同時(shí)使用多種語言,這是XML跨平臺和跨語言的重要特性之一。如:xml:lang="CN-CHN"。語言代碼是一個(gè)兩個(gè)字母的語言代碼,語言代碼后還可跟一個(gè)子代碼,語言代碼可在這里找到http://ftp.ics.uci.edu/pub/ietf/http/related/iso3166.txt。下面是xml:lang屬性聲明的示例:
<!ELEMENT test (#PCDATA)>
<!ATTLIST test xml:lang NMTOKEN #IMPLIED>
由于所有語言代碼都是有效的XML名稱標(biāo)記,所以使用NMTOKEN類型。
計(jì)算機(jī)并不能正真理解文本內(nèi)容,它無法識別諸如a,b,c這類的字母,更不用說中文了。計(jì)算機(jī)所能理解的只有數(shù)字,如60,80等。字符集(character set)規(guī)定了字母到數(shù)字的映射關(guān)系,如65代表大寫字母A。65稱為碼點(diǎn)(code point),字符編碼(character encoding)決定碼點(diǎn)如何用字節(jié)表示。是用多了節(jié)還是單字節(jié),高字節(jié)位表示什么,低字節(jié)位表示什么。
不同國家使用不同的語言,不同程序使用不同的編碼規(guī)范,在進(jìn)行世界范圍內(nèi)的數(shù)據(jù)交換就要統(tǒng)一表示數(shù)據(jù)的字符編碼規(guī)范。傳統(tǒng)的ASCII字符集只定義了127個(gè)字符,其中前31個(gè)是控制符。127位之后的字符隨平臺不同而不同。大多數(shù)平臺只能表示前127位,單字節(jié)(8位),使得字符集中最多只能提供256個(gè)字符。這些標(biāo)準(zhǔn)字符稱為羅馬或拉丁字符集,用ASCII來表示中文、日文是遠(yuǎn)遠(yuǎn)不夠的。
為了解決字符集問題,出現(xiàn)了Unicode字符集。它可用多字節(jié)格式編碼字符,目前標(biāo)準(zhǔn)允許2字節(jié)字符,支持65536個(gè)不同字符。標(biāo)準(zhǔn)的Unicode字符集為Latin-1(或ISO-8859-1)。有關(guān)Unicode的介紹可訪問Unicode的官方網(wǎng)站:http://www.unicode.org
Unicode字符集為字符分配碼點(diǎn),即編號。這些編號可以用多種模式編碼,如UCS-2、UCS-4、UTF-8、UTF-16。
UCS-2,也叫ISO-10646-UCS-2。每個(gè)字符用一個(gè)0~65535之間的兩個(gè)字節(jié)的無符號整數(shù)表示。如A的Unicode碼點(diǎn)為65,用兩個(gè)字節(jié)00和41(十六進(jìn)制)表示。B的Unicode碼點(diǎn)為66,用兩個(gè)字節(jié)00和42表示。UCS-2有兩種形式:高字節(jié)(#x0041)在前和低字節(jié)(#x4100)在前。為區(qū)發(fā)高低位不同表示形式,采用UCS-2編碼文檔通常以Unicode字符#xFEFF(零寬度無間斷空格)開頭,一般稱為字節(jié)順序標(biāo)記(byte order mark)。這個(gè)字符是不可見的。如果兩個(gè)字節(jié)交換位置,得到的字符#xFFFE實(shí)際是不存在的。因此中通過查看UCS-2文檔的前兩個(gè)字符是#xFEFF還是#xFFFE,就可確定該文檔是否是高字節(jié)在前。UCS-2的缺點(diǎn):如果文本字符主要是拉丁文,由于采用兩個(gè)字節(jié),字符集編碼是單字節(jié)字符編碼的兩倍;UCS-2不能與ASCII向前或向后兼容,用于單字節(jié)字符集的工具常常不適用于處理UCS-2編碼文件。
UTF-8是一種可這長度的Unicode編碼。0~127為ASCII碼字符集,與ASCII編碼完全兼容,每個(gè)字符采用一個(gè)字節(jié)編碼。UTF-8用兩個(gè)字節(jié)表示128~2047,該范圍覆蓋了最常見的非表意字母。其余的字符,主要來自漢語、日語和韓語,每個(gè)都用3個(gè)字節(jié)表示。如果Unicode的碼點(diǎn)超過65535個(gè)字符,那么這些字符就會用4個(gè)字節(jié)編碼。對于以拉丁文為主的文件,使用UTF-8比UCS-2可減少一半的文件大小。對于漢語、日語和韓語的文件,其大小會增加百分之五十。對于其它語言,文件大小相差不大。UTF-8是最常用的Unicode編碼方式。
在Unicode流行以前,出現(xiàn)了一系列處理特定語言的單字節(jié)字符集,ISO將14種這樣的字符集標(biāo)準(zhǔn)化成ISO 8859標(biāo)準(zhǔn),分別是ISO-8859-1~14。ISO-8859-15是ISO-8859-1的修訂版本。這些字符集統(tǒng)稱ISO字符集。
Cp1252是依賴于Windows平臺的一種編碼,是Windows的缺省字符集。該種編碼不支持跨平臺特性,盡量不要使用。
MacRoman是Mac OS使用的一種非標(biāo)準(zhǔn)、單字節(jié)編碼。在非Mac平臺下使用也會有問題,盡量不要使用。
本文由腳本之家(http://www.dbjr.com.cn)整理發(fā)布!轉(zhuǎn)載請注明出處,謝謝!
在XML文檔中,如果需輸入編輯器不支持的字符,我們可用字符引用的方式,以十進(jìn)制或十六進(jìn)制給出它所代表的Unicode字符編號,如њ(十進(jìn)制)或者њ(十六進(jìn)制)。字符引用可用于元素內(nèi)容、屬性和注釋,不能用于元素名和屬性名、處理指令或XML關(guān)鍵字。如果有一些字符需經(jīng)常使用,則我們可為這些字符定義實(shí)體,這樣,在文檔中就可方便地引用該實(shí)體了。專門定義字符實(shí)體的DTD我們可獨(dú)立出來,形成以.ent為后綴的外部DTD。在需要時(shí)使用外部參數(shù)實(shí)體引用將這些定義引入文檔的DTD中。
XHTML 1.0 DTD包含有三個(gè)有用的字符引用實(shí)體可在文檔中使用。
Latin-1字符,http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
ISO-8859-1中自160以上的非ASCII碼字符。
特殊字符,http://www.w3.org/TR/xhtml/DTD/xhtml-special.ent
ISO-8859-2中不在Latin-1中的字母。
標(biāo)點(diǎn)符號,http://www.w3.org/TR/xhtml-symbol.ent
希臘字母表(不包含帶重音的字符)和各種標(biāo)點(diǎn)符號、數(shù)學(xué)運(yùn)算符及其他數(shù)學(xué)中常用的符號。
在XML文檔中可以使用xml:lang屬性規(guī)定元素內(nèi)容采用的語言。這樣就可在一篇文檔中同時(shí)使用多種語言,這是XML跨平臺和跨語言的重要特性之一。如:xml:lang="CN-CHN"。語言代碼是一個(gè)兩個(gè)字母的語言代碼,語言代碼后還可跟一個(gè)子代碼,語言代碼可在這里找到http://ftp.ics.uci.edu/pub/ietf/http/related/iso3166.txt。下面是xml:lang屬性聲明的示例:
<!ELEMENT test (#PCDATA)> <!ATTLIST test xml:lang NMTOKEN #IMPLIED>
由于所有語言代碼都是有效的XML名稱標(biāo)記,所以使用NMTOKEN類型。
相關(guān)文章
MIME類型中application/xml與text/xml的區(qū)別介紹
這篇文章介紹了MIME類型中application/xml與text/xml的區(qū)別,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-28- XML中擁有Schema特性,能夠比DTD更加強(qiáng)大地引入元素結(jié)構(gòu),下面我們就來詳解XML中的模式Schema的概念及作用和用法,需要的朋友可以參考下2021-11-30
- 這篇文章主要介紹了XML基本概念入門學(xué)習(xí)指南,包括其與HTML的關(guān)系以及元素和特殊標(biāo)簽等,需要的朋友可以參考下2016-06-24
- XML標(biāo)簽的自定義功能非常強(qiáng)大,比如本文將要講解的DTD(Document Type Definition)就帶給人們一種面向?qū)ο蟀愕母杏X,well,下面就來看一下XML中的DTD文件類型定義完全解析2016-06-24
- 這篇文章主要介紹了XML文件的閱讀與編輯,最常用的工具當(dāng)然還是瀏覽器中的控制臺與源代碼查看,需要的朋友可以參考下2016-02-16
- 這篇文章主要介紹了XML的命名空間,包括命名空間的聲明等XML入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-02-16
解析XML中的樹形結(jié)構(gòu)與DOM文檔對象模型
這篇文章主要介紹了XML中的樹形結(jié)構(gòu)與DOM文檔對象模型,文中舉了JavaScript解析DOM對象的例子,需要的朋友可以參考下2016-02-15- 這篇文章主要介紹了詳解XML編程中的模式定義XSD,講解了如何在XML文檔中聲明模式及定義類型等內(nèi)容,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML中的DTD文檔類型定義,是XML入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-02-15
- 這篇文章主要介紹了XML代碼編寫的編碼與驗(yàn)證問題,與HTML類似,XML文件的編碼也能在序言部分被指定,需要的朋友可以參考下2016-02-15