【问题标题】:returning xml string - how to parse xml file using JQuery/Json返回 xml 字符串 - 如何使用 JQuery/Json 解析 xml 文件
【发布时间】:2013-07-22 16:51:25
【问题描述】:

当我提醒它返回这样的字符串时:

data    "<?xml version="1.0" encoding="utf-8" ?> 
      <xml xmlns="http://www.opengis.net/kml/2.2">
      <Document>
      <Name>John Smith</Name> 
      <Description>stackoverflow</Description> 
      <Total>50</Total> 
      </Document>
      </xml>"

更新: 我尝试使用此方法 getJSON 并且确实收到警报,但从未在 find('Document').each..... 内执行

 $.getJSON(_url, function (data) {

            alert(data);    
            $(data).find('Document').each(function () {
                debugger
                var name = $(this).find('Name');
                var desc = $(this).find('Description').text();
                var total = $(this).find('Total').text()

            });

        });

如何在 jquery 中读取 xml 文件,下面是作为字符串返回给我的内容,当我执行 alert(data) 时我可以看到;

 $.getJSON(url, {},
                function (data) {
                    alert(data);
             }
});


<?xml version="1.0" encoding="utf-8" ?> 
- <xml xmlns="http://www.opengis.net/kml/2.2">
- <Document>
  <Name>John Smith</Name> 
  <Description>stackoverflow</Description> 
  <Total>50</Total> 
  </Document>
  </xml>

【问题讨论】:

  • 你想摆脱什么?另外,这绝对不是 JSON :)
  • 尼克:我的网址正在调用跨域调用,这就是我使用 getJSON 方法的原因,我已经更新了我的问题,请看一下。

标签: jquery json jsonp


【解决方案1】:

如果您仍在寻找答案,Google 的 ajax API 有一个内置的 xml->json 转换器。

您可以通过http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&amp;q= 拨打电话 最后加上您的请求网址。

如果您尝试使用 JSONP 并解决同源问题,它看起来像这样:

var googleAPI = "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=";

$.getJSON(googleAPI + url + "&callback=?", null, function(data) {

        alert(data);    
        $(data).find('Document').each(function () {
            debugger
            var name = $(this).find('Name');
            var desc = $(this).find('Description').text();
            var total = $(this).find('Total').text()

        });
});

但是,这将为您提供 JSON 数据,因此您需要修改回调以将其序列化并访问 Name、Description、Total 元素作为属性。如果您需要这方面的指导,请查看Serializing to JSON in jQuery

【讨论】:

  • 我们用什么替换“文档”以使每个语句真正找到数据?谢谢。
  • 它是上面问题中显示的父节点(序列化后的属性)。此时的数据只是您的 JSON。如果您想直接访问数据,最好的办法是对其进行序列化,请参阅上面我的答案中的链接。
  • 谢谢@ginman,我想通了!我很喜欢这个 API 如何让我们从其他服务器调用外部数据,并通过 jQuery 操作相同的数据。
  • 是的,实际上通过指定 &callback=?,我们正在请求 JSONP,这就是它解决相同来源问题的方式。几天前我才意识到这一点。
【解决方案2】:

您似乎误解了 JSON 是什么,以及它在 jQuery 中的使用方式!?

如果要跨域,返回的数据必须是JSON格式。 jQuery 将在收到 JSON 后立即尝试解析它。它期望它采用像“jsonp1291171891383({})”这样的格式,然后被评估为 JavaScript。您返回的 XML 不是 JavaScript。

解决此问题的一种可能方法是您的返回数据类似于“jsonp1({"data":""})"。如果是这种情况,那么在您的示例中,变量“data”是纯文本,您需要先解析 XML,然后才能通过选择器方法访问它。

来自here

jQuery.fromXMLString = function(strXML){
    if (window.DOMParser) {
        return jQuery(new DOMParser().parseFromString(strXML, "text/xml"));
    } else if (window.ActiveXObject) {
        var doc = new ActiveXObject("Microsoft.XMLDOM");
        doc.async = "false";
        doc.loadXML(strXML);
        return jQuery(doc);
    } else {
        return jQuery(strXML);
    }
};

然后在你的代码中:

 $.fromXMLString(data).find('Document').each( ... );

【讨论】:

    【解决方案3】:

    您不应该将 .getJSON 用于 XML 数据。相反,试试这个:

    $.ajax({
        url: url,
        data: {},
        success: function(data){
            // now you can traverse your data just like the DOM
            // e.g. 
            // alert( $(data).find('Document:first Name').text() );
        },
        dataType: 'xml'
    });
    

    【讨论】:

    • 我正在使用 jsonp 及其跨域引用,这就是我使用 getJson 的原因,我尝试使用您的代码,但它没有提醒我不要给我任何错误......
    • 当我做alert( $(data).find('Document:first Name').text() ); 时,我没有得到任何值,它是空白的
    • 如果我使用$.ajax,我得到access denied error,正如我所说的,我正在使用跨域调用
    【解决方案4】:

    其他人说你不应该使用 JSON,他们是正确的,但我认为你真正需要知道的是 XML 可以像使用 jQuery 的 HTML 一样导航。您可以使用 $('Name') 之类的选择器来获取您的 &lt;Name&gt; 数据等等。因此,一旦您返回了 data,您就可以执行以下操作:

    var people = data.children('Name');
    

    【讨论】:

    • 当我尝试 alert(data.children('Name')) 时收到错误 Microsoft JScript runtime error: Object doesn't support this property or method
    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多