Чтение <CDATA>содержимого через jquery - PullRequest
0 голосов
/ 08 декабря 2011

Я прочитал ~ 50 различных тем на SO, ища ответ на этот вопрос, и я немного узнал о jquery и xml, но я не смог перевести ничего из того, что я делаюили найти кого-нибудь с такой же проблемой.Я пытаюсь получить данные CDATA и записать их в простую таблицу HTML с полями 'id' в качестве заголовков столбцов.

Используя пример, у меня есть следующий XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
  <cd>
    <disk id="artist"><![CDATA[Mikey]]></disk>
    <disk id="title"><![CDATA[Greatest hits]]></disk>
    <disk id="year"><![CDATA[8675309]]></disk>
  </cd>
  <cd>
  .
  .

И следующий код:

$(document).ready(function () {
  $.ajax({
      type:  "GET",
      url:  "catalog.xml",
      dataType:  "xml",
      success:  xmlParser
    });
  });

function xmlParser(xml) {
    $(xml).find("cd").each(function()( {
      $(".main").append('<div class="book"><div class="title">' + 
      $(this).find("disk:first").text() + '</div><div class="description">' + 
      $(this).find("disk:last").text() + '</div>');
    });
  }

Я могу получить первый и последний текст через этометод, но я не могу получить что-то промежуточное, и это не позволяет никаких «пропущенных» полей в записи.Я хотел бы получить содержимое CDATA, связанное со значениями поля 'id', но не смог найти способ сделать это через jquery.Любая помощь будет оценена !!Спасибо!

1 Ответ

0 голосов
/ 08 декабря 2011
function xmlParser(xml) {
    var parts = ['artist', 'title', 'year'];

    $("cd", xml).each(function () {
        var $book = $('<div class="book">');

        for (var i=0; i<parts.length; i++) {
            $("<div>", {
                'class': parts[i],
                'title': parts[i],
                'text' : $("disk[id="+parts[i]+"]", this).text()
            }).appendTo($book);
        }
        $book.appendTo(".main");
    });
}
...