XML在jquery中的格式不正确

时间:2015-07-15 12:53:22

标签: javascript jquery arrays xml

我调用了一个ajax函数,用于从格式化为

的xml文件中收集数据
<?xml version="1.0" encoding="utf-8"?>
<values>     
  <value date="2015-07-12">37.170</value>
  <value date="2015-07-13">7.190</value>
  <value date="2015-07-12">37.170</value>
  <value date="2015-07-12">3.210</value>
  <value date="2015-07-12">37.20</value>
</values>

当我从控制台得到响应时,它说     形式不佳:1:80

不确定这意味着什么,因为当我使用xml验证器时,它们都告诉我没有错误。任何帮助都会很棒。

        var data = [];
    $.ajax({
        url: 'test.xml', // name of file you want to parse
        dataType: "xml", // type of file you are trying to read
        success: parse, // name of the function to call upon success
        async:    false,
        error: function(xhr, status, error) {
              alert(xhr.responseText);
              console.log("readyState: " + xhr.readyState);
                console.log("responseText: "+ xhr.responseText);
                console.log("status: " + xhr.status);
                console.log("text status: " + textStatus);
                console.log("error: " + err);
        }
    });

    function parse(xml) {
        var items = jQuery(xml).find("values");
        var data = [];
        var values = $(items).text();
        $(document).find("Values").each(function () {
            $(this).find("value").each(function () { data.push($this.text);});
        });
        console.log(data.length);
    }

不确定如何将所有值都放入数组中。

3 个答案:

答案 0 :(得分:1)

EDIT!

小提琴已更新。

http://jsfiddle.net/b62tx8Ln/1/

无需使用parseXML解析数据。

对于双重解析,Erik Phillips可能是正确的。无论如何,这应该有用。

请注意在小提琴中使用ECHO .....只是为了模拟本地xml文件。

 $.ajax({
        url: 'test.xml', // name of file you want to parse
        dataType: "xml", // type of file you are trying to read
        success: parse, // name of the function to call upon success
        async:    false,
        error: function(xhr, status, error) { 
            alert("error");
        }
    });

    function parse(xmldata) {
        $(xmldata).find("value").each(function(){
            alert($(this).text());
        });
    }

答案 1 :(得分:1)

您可能会尝试按照文档解析它两次:

  

您期望从服务器返回的数据类型。如果没有指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将产生XML,在1.4 JSON中将产生一个JavaScript对象,在1.4脚本中将执行脚本,其他任何东西将是以字符串形式返回)。

因此我想象这就是你要找的东西:

function parse(xml) {
  //var items = jQuery(xml).find("values");
  var items = xml.find("values");
  var data = [];
  var values = $(items).text();
  $(document).find("Values").each(function () {
    $(this).find("value").each(function () { data.push($this.text);});
  });
  console.log(data.length);
}

答案 2 :(得分:0)

对于在IE中解析非格式良好(自闭标签)xml时遇到问题的其他人,$(xmlthing).find('nodename').each...有效,而IE将解析$(xmlthing).children('nodename').each...(这在FF和Chrome中很好) ,作为嵌套。

那是:

<thing /> <thing /> <thing />

将是FF / Chrome中的3件事,但如果您使用$(节点),则在IE中使用一件。儿童(物件)

$(node).find(thing)将在所有浏览器中为您提供3件事。谢谢@Steen