【问题标题】:Reading <CDATA> contents via jquery通过 jquery 读取 <CDATA> 内容
【发布时间】:2011-12-08 18:13:14
【问题描述】:

我在 SO 上阅读了大约 50 个不同的线程来寻找这个问题的答案,并且我已经了解了一些关于 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>');
    });
  }

我可以通过此方法获取第一个和最后一个文本,但我无法在两者之间获取任何内容,这不允许记录中出现任何“缺失”字段。我想获取与“id”字段值关联的 CDATA 内容,但无法找到通过 jquery 执行此操作的方法。任何帮助,将不胜感激!!谢谢!

【问题讨论】:

  • 你试过用jQuery的属性选择器通过ID来访问元素吗? (例如:$(this).find('disk[id="artist"]').get(0).firstChild.nodeValue;

标签: jquery xml cdata


【解决方案1】:
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");
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2014-10-11
    • 2012-03-28
    • 2011-05-25
    • 2014-10-10
    • 2017-06-20
    • 1970-01-01
    相关资源
    最近更新 更多