читать XML с помощью jquery - PullRequest
0 голосов
/ 13 марта 2011

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>

Скрипт

$.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-файл

1 Ответ

6 голосов
/ 13 марта 2011

Вместо $() используйте $.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 и выше.

...