XML关键知识点
XML 文檔形成一種樹結(jié)構(gòu)
XML 文檔必須包含根元素。該元素是所有其他元素的父元素。
XML 文檔中的元素形成了一棵文檔樹。這棵樹從根部開始,并擴展到樹的最底端。
所有元素均可擁有子元素:
<root> ? <child> ??? <subchild>.....</subchild> ? </child> </root>父、子以及同胞等術(shù)語用于描述元素之間的關(guān)系。父元素?fù)碛凶釉亍O嗤瑢蛹壣系淖釉爻蔀橥?#xff08;兄弟或姐妹)。
所有元素均可擁有文本內(nèi)容和屬性
?在 XML 中,省略關(guān)閉標(biāo)簽是非法的。所有元素都必須有關(guān)閉標(biāo)簽:
<p>This is a paragraph</p> <p>This is another paragraph</p> ? XML 聲明沒有關(guān)閉標(biāo)簽。這不是錯誤。聲明不屬于XML本身的組成部分。它不是 XML 元素,也不需要關(guān)閉標(biāo)簽。XML 標(biāo)簽對大小寫敏感
XML 元素使用 XML 標(biāo)簽進(jìn)行定義。
XML 標(biāo)簽對大小寫敏感。在 XML 中,標(biāo)簽 <Letter> 與標(biāo)簽 <letter> 是不同的
XML 文檔必須有根元素
XML 文檔必須有一個元素是所有其他元素的父元素。該元素稱為根元素。
XML 的屬性值須加引號
<note date="08/08/2008"> <to>George</to> <from>John</from> </note>實體引用
在 XML 中,一些字符擁有特殊的意義。
如果你把字符 "<" 放在 XML 元素中,會發(fā)生錯誤,這是因為解析器會把它當(dāng)作新元素的開始。
這樣會產(chǎn)生 XML 錯誤:
<message>if salary < 1000 then</message>為了避免這個錯誤,請用實體引用來代替 "<" 字符:
<message>if salary < 1000 then</message>在 XML 中,有 5 個預(yù)定義的實體引用:
| < | < | 小于 |
| > | > | 大于 |
| & | & | 和號 |
| ' | ' | 單引號 |
| " | " | 引號 |
注釋:在 XML 中,只有字符 "<" 和 "&" 確實是非法的。大于號是合法的,但是用實體引用來代替它是一個好習(xí)慣。
XML 以 LF 存儲換行
在 Windows 應(yīng)用程序中,換行通常以一對字符來存儲:回車符 (CR) 和換行符 (LF)。這對字符與打字機設(shè)置新行的動作有相似之處。在 Unix 應(yīng)用程序中,新行以 LF 字符存儲。而 Macintosh 應(yīng)用程序使用 CR 來存儲新行。
什么是 XML 元素?
XML 元素指的是從(且包括)開始標(biāo)簽直到(且包括)結(jié)束標(biāo)簽的部分。
元素可包含其他元素、文本或者兩者的混合物。元素也可以擁有屬性。
<bookstore> <book category="CHILDREN"><title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"><title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>在上例中,<bookstore> 和 <book> 都擁有元素內(nèi)容,因為它們包含了其他元素。<author> 只有文本內(nèi)容,因為它僅包含文本。
在上例中,只有 <book> 元素?fù)碛?span style="margin:0px; padding:0px; border:0px; font-weight:bold">屬性?(category="CHILDREN")。
XML 命名規(guī)則
XML 元素必須遵循以下命名規(guī)則:
- 名稱可以含字母、數(shù)字以及其他的字符
- 名稱不能以數(shù)字或者標(biāo)點符號開始
- 名稱不能以字符 “xml”(或者 XML、Xml)開始
- 名稱不能包含空格
可使用任何名稱,沒有保留的字詞。
XML 元素可以在開始標(biāo)簽中包含屬性,類似 HTML。
屬性 (Attribute) 提供關(guān)于元素的額外(附加)信息。
XML 屬性必須加引號
屬性值必須被引號包圍,不過單引號和雙引號均可使用。比如一個人的性別,person 標(biāo)簽可以這樣寫:
在 XML 中,您應(yīng)該盡量避免使用屬性。如果信息感覺起來很像數(shù)據(jù),那么請使用子元素吧
元數(shù)據(jù)(有關(guān)數(shù)據(jù)的數(shù)據(jù))應(yīng)當(dāng)存儲為屬性,而數(shù)據(jù)本身應(yīng)當(dāng)存儲為元素。
擁有正確語法的 XML 被稱為“形式良好”的 XML。
通過 DTD 驗證的 XML 是“合法”的 XML。
形式良好的 XML 文檔
“形式良好”或“結(jié)構(gòu)良好”的 XML 文檔擁有正確的語法。
“形式良好”(Well Formed)的 XML 文檔會遵守前幾章介紹過的 XML 語法規(guī)則:
- XML 文檔必須有根元素
- XML 文檔必須有關(guān)閉標(biāo)簽
- XML 標(biāo)簽對大小寫敏感
- XML 元素必須被正確的嵌套
- XML 屬性必須加引號
XML DTD
DTD 的作用是定義 XML 文檔的結(jié)構(gòu)。它使用一系列合法的元素來定義文檔結(jié)構(gòu):
XML Schema
W3C 支持一種基于 XML 的 DTD 代替者,它名為 XML Schema:
幾乎所有的主流瀏覽器均支持 XML 和 XSLT。
所有現(xiàn)代瀏覽器都內(nèi)建了供讀取和操作 XML 的 XML 解析器。
解析器把 XML 轉(zhuǎn)換為 XML DOM 對象 - 可通過 JavaScript 操作的對象。
DOM (Document Object Model,文檔對象模型)定義了訪問和操作文檔的標(biāo)準(zhǔn)方法。
XML DOM
XML DOM (XML Document Object Model) 定義了訪問和操作 XML 文檔的標(biāo)準(zhǔn)方法。
DOM 把 XML 文檔作為樹結(jié)構(gòu)來查看。能夠通過 DOM 樹來訪問所有元素。可以修改或刪除它們的內(nèi)容,并創(chuàng)建新的元素。元素,它們的文本,以及它們的屬性,都被認(rèn)為是節(jié)點。
在下面的例子中,我們使用 DOM 引用從 <to> 元素中獲取文本:
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue- xmlDoc?-由解析器創(chuàng)建的 XML 文檔
- getElementsByTagName("to")[0]?- 第一個 <to> 元素
- childNodes[0]?- <to> 元素的第一個子元素(文本節(jié)點)
- nodeValue?- 節(jié)點的值(文本本身)
XML 命名空間提供避免元素命名沖突的方法。
在 XML 中,元素名稱是由開發(fā)者定義的,當(dāng)兩個不同的文檔使用相同的元素名時,就會發(fā)生命名沖突。
使用前綴來避免命名沖突
所有 XML 文檔中的文本均會被解析器解析。
只有 CDATA 區(qū)段(CDATA section)中的文本會被解析器忽略。
PCDATA
PCDATA 指的是被解析的字符數(shù)據(jù)(Parsed Character Data)。
XML 解析器通常會解析 XML 文檔中所有的文本。
當(dāng)某個 XML 元素被解析時,其標(biāo)簽之間的文本也會被解析:
CDATA
術(shù)語 CDATA 指的是不應(yīng)由 XML 解析器進(jìn)行解析的文本數(shù)據(jù)(Unparsed Character Data)。
在 XML 元素中,"<" 和 "&" 是非法的。
"<" 會產(chǎn)生錯誤,因為解析器會把該字符解釋為新元素的開始。
"&" 也會產(chǎn)生錯誤,因為解析器會把該字符解釋為字符實體的開始。
某些文本,比如 JavaScript 代碼,包含大量 "<" 或 "&" 字符。為了避免錯誤,可以將腳本代碼定義為 CDATA。
CDATA 部分中的所有內(nèi)容都會被解析器忽略。
CDATA 部分由 "<![CDATA[" 開始,由 "]]>" 結(jié)束:
<script> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) then{return 1;} else{return 0;} } ]]> </script>在上面的例子中,解析器會忽略 CDATA 部分中的所有內(nèi)容。
XML DOM (Document Object Model) 定義了訪問和操作 XML 文檔的標(biāo)準(zhǔn)方法。
DOM 把 XML 文檔視為一種樹結(jié)構(gòu)。通過這個 DOM 樹,可以訪問所有的元素。可以修改它們的內(nèi)容(文本以及屬性),而且可以創(chuàng)建新的元素。元素,以及它們的文本和屬性,均被視為節(jié)點。
創(chuàng)建元素
createElement() 方法創(chuàng)建新的元素節(jié)點。
createTextNode() 方法創(chuàng)建新的文本節(jié)點。
appendChild() 方法向節(jié)點添加子節(jié)點(在最后一個子節(jié)點之后)。
如需創(chuàng)建帶有文本內(nèi)容的新元素,需要同時創(chuàng)建元素節(jié)點和文本節(jié)點。
下面的代碼創(chuàng)建了一個元素 (<edition>),然后把它添加到第一個 <book> 元素中:
newel=xmlDoc.createElement("edition"); newtext=xmlDoc.createTextNode("First"); newel.appendChild(newtext);x=xmlDoc.getElementsByTagName("book"); x[0].appendChild(newel);例子解釋:
XML 是基于文本的
XML 是基于文本的標(biāo)記語言。
關(guān)于 XML 的一件很重要的事情是,XML 可被類似記事本這樣的簡單的文本編輯器來創(chuàng)建和編輯。
不過,在您開始使用 XML 進(jìn)行工作時,您很快會發(fā)現(xiàn),使用一款專業(yè)的 XML 編輯器來編輯 XML 文檔會更好。
總結(jié)
- 上一篇: c++ 虚继承与继承的差异
- 下一篇: 融合CDN,纾解数据拥塞之困