book.xml:
(1)與HTML的主要差異:
HTML 被設計用來顯示數據。 XML 被設計用來傳輸和存儲數據
(2)XML語法,元素,屬性等,另外還有XML CSS,XML XSLT等。
(3)XML DOM
DOM----------定義了所有文檔元素的對象和屬性,以及訪問它們的方法(接口)
XML DOM 定義了所有 XML 元素的對象和屬性,以及訪問它們的方法(接口),用於獲取、更改、添加或刪除 XML 元素的標準。
(4)XML的用途:
1)把數據從HTML中進行分離;
2)簡化數據共享,它提供了一種獨立於軟硬件的數據存儲方法;
3)簡化平臺的變更;
4)用於創建新的Internet語言(如XHTML,WSDL,WAP,WML,RSS等)
(5)XML樹結構:XML文檔必須包含根元素,它是其它元素的父元素。
(6)XML語法規則:
1)所有 XML 元素都須有關閉標籤;
2)XML 標籤對大小寫敏感;
3)XML 必須正確地嵌套;
4)XML 文檔必須有根元素;
5)XML 的屬性值須加引號;
6)使用實體引用
(7)XML元素:指的是從(且包括)開始標籤直到(且包括)結束標籤的部分。元素還可以擁有屬性。不過屬性必須加引號,若屬性本身含有雙引號,則應該用單引號包圍它。ID屬性可用來標識一個元素。
(8)如果 XML 文檔存在錯誤,那麼程序就不應當繼續處理這個文檔。理由是,XML 軟件應當輕巧,快速,具有良好的兼容性。
(9)可以使用CSS或者XSLT進行格式化。
(10)XMLHttpRequest對象:它提供了對HTTP協議的完全的訪問,包括做出POST和HEAD請求以及普通的Get請求的能力。它可以同步或者異步返回web服務器的響應,並以文本或者DOM文檔的形式返回內容。
【屬性】
readyState:當一個 XMLHttpRequest 初次創建時,這個屬性的值從 0 開始,直到接收到完整的 HTTP 響應,這個值增加到 4。下圖是5個狀態圖:(每一次當屬性的值增加時,都會觸發onreadystatechange事件句柄)
responseText:目前爲止爲服務器接收到的響應體(不包括頭部),或者如果還沒有接收到數據的話,就是空字符串。若readyState小於3,則屬性爲空字符串,若爲3,則返回已經接收到的響應部分,若爲4,則保存完整的響應體。
responseXML:對請求的響應,解析爲XML並作爲Document對象返回。
status:由服務器返回的HTTP狀態代碼。
StatusText:這個屬性用名稱而不是數字指定了請求的 HTTP 的狀態代碼,如狀態爲200時返回“OK”,404時返回“Not Found”,和 status 屬性一樣,當 readyState 小於 3 的時候讀取這一屬性會導致一個異常。
【事件句柄】
Onreadystatechange: 每次 readyState 屬性改變的時候調用的事件句柄函數。當 readyState 爲 3 時,它也可能調用多次。
【方法】
getAllResponseHeaders:把 HTTP 響應頭部作爲未解析的字符串返回。如果 readyState 小於 3,這個方法返回 null。否則,它返回服務器發送的所有 HTTP 響應的頭部。頭部作爲單個的字符串返回,一行一個頭部。每行用換行符 "\r\n" 隔開。
getResponseHeader:返回指定的 HTTP 響應頭部的值。其參數是要返回的 HTTP 響應頭部的名稱。
open:初始化 HTTP 請求參數,例如 URL 和 HTTP 方法,但是並不發送請求。這個方法初始化請求參數以供 send() 方法稍後使用。
語法:open(method, url, async, username, password)
method 參數是用於請求的 HTTP 方法。值包括 GET、POST 和 HEAD。
url 參數是請求的主體。async 參數指示請求使用應該異步地執行。如果這個參數是 false,請求是同步的,後續對 send() 的調用將阻塞,直到響應完全接收。如果這個參數是 true 或省略,請求是異步的,且通常需要一個 onreadystatechange 事件句柄。
username 和 password 參數是可選的,爲 url 所需的授權提供認證資格。
send:
語法:send (body)
這個方法導致一個 HTTP 請求發送。如果之前沒有調用 open(),或者更具體地說,如果 readyState 不是 1,send() 拋出一個異常。否則,它發送一個 HTTP 請求,該請求由以下幾部分組成:
· 之前調用 open() 時指定的 HTTP 方法、URL 以及認證資格(如果有的話)。
· 之前調用 setRequestHeader() 時指定的請求頭部(如果有的話)。
· 傳遞給這個方法的 body 參數。
(12) XML解析器:解析器能將XML轉換爲XML DOM對象,可通過JS操作的對象。
所有現代瀏覽器都有讀取和操作 XML 的內建 XML 解析器。微軟的 XML 解析器與其他瀏覽器中的解析器之間,存在一些差異。微軟的解析器支持 XML 文件和 XML 字符串(文本)的加載,而其他瀏覽器使用單獨的解析器。不過,所有的解析器都包含遍歷 XML 樹、訪問插入及刪除節點(元素)及其屬性的函數。
(13)XML DOM(Document Object Model,文檔對象類型,定義了訪問和操作文檔的標準方法)
XML DOM:定義了訪問和操作XML文檔的標準方法,還定義了所有XML元素的對象和屬性。
【註釋】DOM 把 XML 文檔作爲樹結構來查看。能夠通過 DOM 樹來訪問所有元素。可以修改或刪除它們的內容,並創建新的元素。元素,它們的文本,以及它們的屬性,都被認爲是節點。
HTML DOM:定義了訪問和操作HTML文檔的標準方法,可以通過HTML DOM訪問所有HTML元素。
XML DOM對象參考手冊:裏面包括所有的對象,以及它們的屬性和方法。
DOM介紹: DOM是W3C的推薦標準,定義了訪問HTML以及XML文檔的標準。W3C將DOM分成3個不同的部分,即核心DOM(用於任何結構化文檔的標準模型)、XML DOM和HTML DOM。
節點的定義:根據 DOM,XML 文檔中的每個成分都是一個節點。
【注意】文本總是存儲在文本節點中的。在 DOM 處理中一個普遍的錯誤是,認爲元素節點包含文本。不過,元素節點的文本是存儲在文本節點中的。在這個例子中:<year>2005</year>,元素節點 <year>,擁有一個值爲 "2005" 的文本節點。"2005" 不是 <year> 元素的值!
XML DOM節點樹: XML DOM 把 XML 文檔視爲一種樹結構。這種樹結構被稱爲節點樹,可通過這棵樹訪問所有節點。可以修改或刪除它們的內容,也可以創建新的元素。
節點之間的關係:父子以及同級節點
解析XML DOM:大多數瀏覽器都內建了供讀取和操作XML的XML解析器,將XML DOM轉換成JS對象。 微軟的 XML 解析器與其他瀏覽器中的解析器是有差異的。微軟的解析器支持對 XML 文件和 XML 字符串(文本)的加載,而其他瀏覽器使用單獨的解析器。不過,所有的解析器都含有遍歷 XML 樹、訪問、插入及刪除節點的函數。
微軟XML解析器對文件和字符串(文本)的解析對比:
【代碼解釋】第一行創建空的微軟 XML 文檔對象;第二行關閉異步加載,這樣可確保在文檔完整加載之前,解析器不會繼續執行腳本;第三行告知解析器加載名爲 "books.xml" 的文檔。
【註釋】loadXML() 方法用於加載字符串(文本),而 load() 用於加載文件;IE瀏覽器用loadXML()方法來解析XML字符串,而其他瀏覽器則用DOMParse對象進行解析。
XML DOM加載函數:可以將加載XML文檔的代碼存儲在一個單獨的函數中。(利用HTML中src標籤將JS函數包含來實現)
XML DOM的屬性和方法:定義了編程接口
【典型的DOM屬性】
-----------à其中x是一個節點對象
【典型的DOM方法】
XML DOM訪問節點:
♥ 利用節點列表中的下標號來訪問節點(通過使用 getElementsByTagName() 方法)
【注意】 getElementsByTagName() 方法返回節點列表 (node list)。節點列表是節點的數組,因此可以用標號進行訪問
♥ 利用節點的length屬性來循環節點
♥ 利用節點之間的關係進行導航
XML節點信息:
【XML DOM節點重要屬性】
nodeName--------------------規定了節點名字
nodeType---------------------規定了節點類型
nodeValue--------------------規定了節點值
Attributes |
元素節點 |
屬性節點 |
文本節點 |
文檔節點 |
nodeName |
與標籤相同 |
屬性的名字 |
#text |
#document |
nodeValue |
Undefined |
屬性的值 |
文本自身 |
|
nodeType(只讀的) |
1 |
2 |
3 |
9 |
【注意】XML文檔的documentElement屬性返回的是根節點。訪問文本節點應該先從元素節點入手,利用childNodes屬性進行訪問。
XML DOM節點列表:
如何獲取元素的屬性節點的信息呢?(根節點是沒有屬性信息的)
♥ 元素節點的 attributes 屬性返回屬性節點的列表
♥ getNamedItem方法可以取出某個特定屬性的值
XML DOM瀏覽器的差異:
♥ 加載XML的方式差異
♥ 處理空白和換行的方式(IE瀏覽器是自動忽略掉這些文本節點信息的,然而其他瀏覽器卻計算在length之內)
【忽略節點間的空文本方法】(只需解決掉元素節點的問題即可)
XML DOM定位節點:
定位節點關係的屬性有:
常見的節點操作類型:
XML DOM獲取節點值:
♥ 獲取元素值: 在DOM中,每個成分均是節點,元素節點沒有文本值,元素節點的文本存儲在子節點中,該節點叫文本節點,獲取元素文本的方法是獲取這個子節點(文本節點)的值。
♥ 獲取屬性的值:在DOM中,屬性也爲節點,與元素節點不同的是,屬性節點擁有文本值,獲取屬性值的方法就是獲取它的文本值。方法有:getAttribute方法或者屬性節點的nodeValue屬性(前面用過)來完成任務。
getAttribute---------返回屬性值
getAttributeNode-------------返回屬性節點
XML DOM改變節點值:
♥ 改變原文本的值:通過直接賦值修改即可。
♥ 改變屬性的值:方法同樣有兩種,設置nodeValue屬性值或者運用setAttribute方法
XML DOM刪除節點:
♥ 刪除元素節點方法:removeChild刪除指定節點,利用前面的定位函數還可以刪除自身節點。
♥ 刪除文本節點(關鍵是定位問題)
若要清楚文本值,只需要將文本節點值置爲空即可。nodeValue=””.
♥ 刪除屬性節點方法:removeAttribute(name)(根據名稱刪除)和removeAttributeNode(node)(根據節點刪除)
XML DOM替換節點:
♥ 替換整個節點:replaceChild方法
♥ 替換文本中的數據:replaceData方法或者直接給nodeValue賦值更容易
格式:replaceData (offset, length, string)
offset------à從何處開始替換 length-------à替換多少字符 string------à要插入的字符串
XML DOM創建節點:
♥ 元素節點 : createElement方法
♥ 屬性節點: createAttribute方法或者直接使用setAttribute創建屬性
♥ 文本節點:createTextNode方法
♥ CDATA Section節點:createCDATASection方法(CDATA指的是不被XML解析器解析的文本數據)
♥ 註釋節點:createComment方法
XML DOM添加節點:
♥ 添加子節點:appendChild方法,新節點會添加到已存在的節點之後
♥ 插入節點:insertBefore方法,在指定的子節點前插入節點
♥ 添加新屬性節點:setAttribute方法
【注意】若所設置的屬性已經存在,則會替換掉原有屬性。
♥ 向文本節點添加文本:insertData方法 -----------------à insertData(offset, string)
XML DOM 克隆節點:cloneNode方法
cloneNode(true or false)-------------à若參數爲true,則複製的節點包括源節點的所有屬性和子節點。