Вместо $()
используйте $.parseXML
для анализа строки XML.( Обновление: См. Примечание ниже, parseXML
был добавлен в jQuery 1.5, но при желании его легко добавить в более старую версию.) Это даст вам необработанный документ 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");
});
Пример в реальном времени
Если вы загружаете XML с помощью ajax
, вам обычно не нужно этого делать, поскольку 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);
}
});
Живая копия
Обновление : parseXML
было добавлено в jQuery в версии 1.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;
};
Вот живая копия моего первого примера, но с использованием jQuery 1.4.4 и выше.