2010-01-23 72 views
3

我目前正在尋找一種簡單的方法來使用JavaScript從服務器XML響應中提取信息。 jQuery似乎是一個很好的候選人。

當談到與jQuery解析XML,我不斷遇到類似下面的代碼片段的例子來:

function parseXml(responseXml) { 

    $(responseXml).find('someSelector')... 

} 

然而,jQuery的核心文檔(以下報價)明確指出,你不應該要做到這一點:

jQuery(html, [ ownerDocument ])

html一個即時創建的HTML字符串。請注意,這解析HTML,而不是 XML。

http://api.jquery.com/jQuery/#jQuery2

這使我不知道爲什麼有這麼多的在線資源仍然建議通過$(responseXml)解析XML。儘管API文檔說了什麼,這通常是否可以毫無問題地工作?在什麼情況下會這樣解析XML實際上而不是工作?

回答

3

jQuery的AJAX文件添加http://api.jquery.com/jQuery.ajax/

的dataType

「XML」:返回一個可以通過jQuery待處理的XML文檔。

...如果服務器報告返回的數據爲XML,結果可以用正常的方法XML或jQuery的選擇遍歷...

此外,在http://api.jquery.com/jQuery/

當XML數據是從Ajax調用中返回的,我們可以使用$()函數將其包裝在一個我們可以輕鬆使用的jQuery對象中。完成此操作後,我們可以使用.find()和其他DOM遍歷方法檢索XML結構的各個元素。

4

我不知道我的經驗是否可以推廣,但是我有我用jQuery解析SOAP消息的問題。這可能不是jQuery的問題(​​正如你指出文檔不贊同它)。

無論如何,你問具體細節:我發現一切與名稱空間有問題。當然,對於真正的名稱空間感知,您需要一些可以將名稱空間前綴解析爲名稱空間URI的東西。我從來沒有預料到jQuery能夠做到這一點,但即使只匹配前綴也不適合我。這對我來說尤其有問題,因爲我處理的SOAP消息很容易混合4個或5個命名空間。所以我自己回去做DOM遍歷來解決這個問題(它有自己的一套問題)

這就是說,我確實希望jQuery能夠處理xhtml文檔(只要標籤名稱不是前綴),並且我希望它也可以用於其他不使用名稱空間前綴的xml文檔。

3

您的鏈接實際指向的是jQuery(html)使用與創作從琴絃元素的交易,即

$('<a href="..."></a>') 

您的代碼使用是jQuery(element)這是好的XML的一個。

由於responseXML是XML的,而不是一個字符串,你可以自由地使用jQuery()就可以了。

+0

我沒有意識到,'responseXml'是沒有字符串,可能是因爲我做了一些實驗(例如'$(「 ...」)'),並且似乎工作排序。 – stakx 2010-01-23 22:28:24

相關問題