2011-01-26 30 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?