2011-03-13 45 views
0

XML讀取XML的jQuery

<?xml version='1.0' encoding='utf-8' ?> 
     <RecentTutorials> 
     <Tutorial author='The Reddest'> 
     <Title>Silverlight and the Netflix API</Title> 
     <Categories> 
       <Category>Tutorials</Category> 
       <Category>Silverlight 2.0</Category> 
       <Category>Silverlight</Category> 
       <Category>C#</Category> 
       <Category>XAML</Category> 
     </Categories> 
     <Date>1/13/2009</Date> 
     </Tutorial> 
     </RecentTutorials> 

腳本

$.ajax({ 
    type: "post", 
    url: "Default.aspx?cmd=Setting", 
    success: parseXml 
}); 
 
    alert(xml);//show xml File Success 
    $(xml).find("Tutorial").each(function() 
    { 
     $("#b").append($(this).attr("author")); 
    } 

XML文件都看不懂雖然警報(XML);顯示XML文件

回答

6

不是$(),使用$.parseXML解析XML字符串。 (更新:參見下面的說明,在jQuery的1.5加入parseXML但它很容易,如果你想將其添加到一箇舊版本),它會給你一個原始XML文檔;你可以使用$()來獲得該文檔的jQuery包裝。

像這樣:

var xml = 
    "<?xml version='1.0' encoding='utf-8' ?>" + 
    "<RecentTutorials>" + 
    "<Tutorial author='The Reddest'>" + 
    "<Title>Silverlight and the Netflix API</Title>" + 
    "<Categories>" + 
    "<Category>Tutorials</Category>" + 
    "<Category>Silverlight 2.0</Category>" + 
    "<Category>Silverlight</Category>" + 
    "<Category>C#</Category>" + 
    "<Category>XAML</Category>" + 
    "</Categories>" + 
    "<Date>1/13/2009</Date>" + 
    "</Tutorial>" + 
    "</RecentTutorials>"; 

$($.parseXML(xml)).find("Tutorial").each(function() { 
    var author = $(this).attr("author"); 
}); 

Live example

如果您是通過ajax加載XML,你通常沒有這樣做,因爲jQuery將你做它作爲加載的一部分序列,然後給你的XML文檔作爲data參數你success回調,但如果你只是有一個任意字符串,並且要分析它,parseXML是這項工作的工具。

ajax例如:

$.ajax({ 
    url: "the/url/to/load/the/xml/from", 
    method: "GET", 
    dataType: "xml", 
    success: function(data) { 
     var xdoc = $(data); // Note that jQuery has already done the parsing for us 
     display("Getting tutorials"); 
     var tutorials = xdoc.find("Tutorial"); 
     display("Found: " + tutorials.length); 
     tutorials.each(function() { 
      display("Tutoral author: " + $(this).attr("author")); 
     }); 
    }, 
    error: function(jxhr, status, err) { 
     display("Ajax error: status = " + status + ", err = " + err); 
    } 
}); 

Live copy


更新parseXML加入的jQuery在V1.5。如果可以,請升級到最新使用它。如果你不能,如果你使用一個過時的版本,您可以輕鬆地添加功能,以您自己的腳本。與jQuery的許多地方,它是很好的自包含的jQuery的源:

jQuery.parseXML = function(data , xml , tmp) { 

    if (window.DOMParser) { // Standard 
     tmp = new DOMParser(); 
     xml = tmp.parseFromString(data , "text/xml"); 
    } else { // IE 
     xml = new ActiveXObject("Microsoft.XMLDOM"); 
     xml.async = "false"; 
     xml.loadXML(data); 
    } 

    tmp = xml.documentElement; 

    if (! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror") { 
     jQuery.error("Invalid XML: " + data); 
    } 

    return xml; 
}; 

我的第一個例子中的Here's a live copy,但使用jQuery 1.4.4加上以上。

+0

使用jQuery.parseXML但錯誤。 – beginner 2011-03-13 09:37:28

+0

@beginner:*什麼*錯誤? (提示:在尋求幫助時,*從不*說「..但我得到了一個錯誤。」說「......但我得到了這個錯誤:____」。)正如你從鏈接的例子中看到的那樣, XML是格式良好的,並且這樣(和你引用的XML是)。 – 2011-03-13 09:38:47

+0

@beginner:我也加了一個'ajax'的例子。 – 2011-03-13 09:42:48