2011-01-26 46 views
3

可能存在奇怪的問題;我試圖加載一個XML到jQuery來遍歷它。

使用$ .post我完全可以做到這一點,並指定XML作爲dataType。我的問題圍繞着如何讓jQuery使用該數據類型來理解相同的數據(如果它已經在頁面中),即我將它放在一個變量中。

每當我使用剛好變量中的相同的XML數據,它不能正確地遍歷它。

我試着取出申報和刪除問號,逃避報價等

我已經試過裝,如: -

var xml = new XML('<blah><moo>134</moo></blah>'); 

當然

var xml = $('<blah><moo>134</moo></blah>'); 

var xml = '<blah><moo>134</moo></blah>'; 

and

var xml = "<blah><moo>134</moo></blah>"; 

等我做錯了什麼?

+0

+1我從來沒有聽說過這樣做的,但我可以看到它會是一個有用的功能。 – Jake 2011-01-26 18:50:27

+0

你可以顯示你用來遍歷XML字符串的代碼嗎? – Jake 2011-01-26 18:56:20

+0

試試這個:http://stackoverflow.com/q/1290321/273816 – chprpipr 2011-01-26 18:57:00

回答

3

問題是,jQuery不解析XML,除了在執行Ajax請求時使用內置瀏覽器responseXML屬性XMLHttpRequest。如果您將一個XML字符串傳遞給$(),它只是假設它是HTML,將它指定爲HTML元素的innerHTML並讀取該HTML元素的子元素。這不是XML解析。

解析XML,你可以使用函數如下所示:

var parseXml; 

if (window.DOMParser) { 
    parseXml = function(xmlStr) { 
     return (new window.DOMParser()).parseFromString(xmlStr, "text/xml"); 
    }; 
} else if (typeof window.ActiveXObject != "undefined" && new window.ActiveXObject("Microsoft.XMLDOM")) { 
    parseXml = function(xmlStr) { 
     var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM"); 
     xmlDoc.async = "false"; 
     xmlDoc.loadXML(xmlStr); 
     return xmlDoc; 
    }; 
} else { 
    parseXml = function() { return null; } 
} 

var xml = parseXml("<blah><moo>134</moo></blah>"); 
if (xml) { 
    window.alert(xml.documentElement.nodeName); 
} 

UPDATE

的jQuery 1.5的新parseXML()方法正是這樣做的,而且似乎運作良好。

var xml = $.parseXML("<blah><moo>134</moo></blah>"); 

這給你一個XML文檔,然後你就可以遍歷通常的方式使用jQuery:

var $xml = $(xml); 
alert($xml.find("moo:first")[0].nodeName); 
2

下面是一個使用$阿賈克斯和工程跨瀏覽器(Chrome的很好,IE8,Firefox 3.6以上)的樣本:

var pathToXML = "http://www.site.com/data/data.xml"; 
var xml; 
    $.ajax({type: "GET", 
      url: pathToXML, 
      cache: false, 
      dataType: ($.browser.msie) ? "text" : "xml", 
      error: function(XMLHttpRequest, textStatus, errorThrown){alert(textStatus)}, 
      success: function(data){ 
      // workaround for msie 
      if (typeof data == "string") { 
        xml = new ActiveXObject("Microsoft.XMLDOM"); 
        xml.async = false; xml.loadXML(data); 
      } else { xml = data; } 
      xml.setProperty("SelectionLanguage", "XPath"); 
      // end workaround 
      // use $(xml).find('node').text(); 
      var bobsNodeValue = $(xml).find("node[id='bob']").text(); 
    }}); 

這也將它作爲實際的XML,它的jQuery可以遍歷像一個正常的DOM樹使用.find().text()

編輯::只讀通過對問題的新評論。你可以在這裏發佈失敗的xml的例子嗎?此外,使用.html()可能會導致錯誤,而.text()應該爲空節點返回空白字符串。

編輯編輯::這是一個fiddle顯示沒有錯誤,你用什麼代碼來遍歷,並且這是所有的瀏覽器或只是一個特定的?

0

您試圖在將它發送給jQuery之前對xml進行urlencode?