讀古今文學網 > 鋒利的jQuery(第2版) > 附錄E jQuery加載並解析XML >

附錄E jQuery加載並解析XML

E.1 簡述

XML(eXtensible Markup Language)即可擴展標記語言,與HTML一樣,都是屬於SGML標準通用語言。在XML中,採用了如下語法。

(1)任何起始標籤都必須有一個結束標籤。

(2)可以採用另一種簡化語法,即在一個標籤中同時表示起始和結束標籤。這種語法是在右邊閉合尖括號之前緊跟一個斜線(/),例如<tag/>。XML解析器會將其翻譯成<tag></tag>。

(3)標籤必須按照合理的順序進行嵌套,因此結束標籤必須按鏡像順序匹配起始標籤,例如<b> this is a <i>sample</i> string</b>。這相當於將起始和結束標籤看作是數學中的左右括號,在沒有關閉所有的內部括號之前,不能關閉外面的括號。

(4)所有的屬性都需要有值,並且需要在值的周圍加上雙引號。

E.2 Content-Type

很多情況下XML文件不能正常解析都是由於Content-Type沒有設置好。如果Content-Type本身就是一個XML文件則不需要設置;如果是由後台程序動態生成的,那麼就需要設置Content-Type為「text/xml」,否則jQuery會以默認的「text/html」方式處理,導致解析失敗。以下是幾種常見語言中設置Content-Type的方式。

E.3 XML結構

作為一個標準的XML,必須要遵循嚴格的格式規定,其中最重要的一條規則就是XML必須是封閉的。例如如下代碼就是錯誤的,因為它並沒有閉合。

另外XML文檔只能有一個頂層元素。例如以下代碼就是錯誤的,原因是它有多個頂層元素。

一個正確的XML應該是下面這樣的形式。

E.4 獲取XML

利用上面提到的正確的XML,通過jQuery的Ajax函數進行讀取,jQuery代碼如下:

這樣就可以很容易地從後台讀取到一段XML,當然也可以用簡單的$.get方法和$.post方法來去獲取。代碼如下:

E.5 解析XML

解析XML文檔與解析DOM一樣,也可以用find、children等函數來解析和用each方法來進行遍歷,另外也可以用text和attr方法來獲取節點文本和屬性。例如在success回調裡解析XML。代碼如下:

通過上面的代碼,能成功獲取到相應的數據。接下來就可以將解析出來的數據添加到已有的HTML文件中。通常可以先生成一個DOM元素片段,然後將數據用appendTo函數添加進這個元素片段中,最後將這個片段添加進HTML文檔中。success回調代碼如下:

E.6 禁用緩存

在項目中經常會遇到一個問題,即數據已經更新了,但傳遞的還是以前的數據。要避免這種情況,就應當禁用緩存。禁用緩存的方式有很多種。如果是通過$.post方法獲取的數據,那麼默認就是禁用緩存的。如果是用了$.get方法,可以通過設置時間戳來避免緩存。可以在URL的後面加上+(+new Date),代碼如下:

之所以不用隨機數,是因為隨機數對於同一台電腦來說,在大量使用之後出現重複的概率會很大,而用時間戳則不會出現這種情況。

此外,如果使用了$.ajax方法來獲取數據,只需要設置cache:false即可。但要注意,false是布爾值而不是一個字符串,在這一點上初學者很容易犯錯。

掌握了以上內容後,讀者就可以順利地寫出符合XML語法規範並能正確解析的XML文件了。