XML學習

 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,則複製的節點包括源節點的所有屬性和子節點

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章