通过JavaScript访问XML

时间:2011-10-05 06:41:40

标签: javascript jquery xml ajax

我有一个XML文件,我正试图从中提取数据。 XML文件看起来像这样

    <doc>

    <str name="name">Rocky</str>
    <str name="Last_name">balboa</str>
    <str name="age">42</str>
    <str name="sex">M</str>
    <str name="dob">2012-09-09</str>

   </doc>
   <doc>... </doc>
   <doc>... </doc>
   <doc>... </doc>

我的.ajax电话就是这样......

    $.ajax({
            type : "GET",
            url : "my.xml",
            dataType : "xml",
            success : function(data) {
                $(data).find('doc').each(function() {
                    alert("i was here");
            var u1 = $(this).find('name').text();alert(u1);
            var u2 = $(this).find('last_name').text();
            var finale1 = u1 + "/" + u2;
            var dt = $(this).find('dob').text();
            var dt1 = dt.substr(0,4);
            var desc = $(this).find('age').text();
                    alert("i am here");

                });
            }   

            });

我在这里做错了什么?任何人都可以指出。

4 个答案:

答案 0 :(得分:1)

你应该在使用之前解析你的xml (如果你的ajax调用返回xml,则不需要这样做)。 注意:

  1. 标记名称:您查找<document>元素,而您有<doc> 元素
  2. 属性和标签是不同的东西。 find('name')寻找a      标记,而不是名称属性:
  3. 有关工作示例,请参阅here(我的xml是本地字符串,但您可以轻松调整脚本)和here for parseXML documentation以及xml用法示例。

    var xml = "<doc><str name=\"name\">Rocky</str><str name=\"sex\">M</str><str name=\"dob\">2012-09-09</str></doc>",
        xmlDoc = $.parseXML( xml ),
        xml = $( xmlDoc ),
        name = xml.find( "str[name='name']" );
    
    alert (name.text()); 
    

答案 1 :(得分:1)

当您尝试选择以下标记时:

<str name="name">Rocky</str>

您应该使用$(this).find('name')

而不是$(this).find('str[name="name"]')

对于每个str标记,此错误多次出现。

答案 2 :(得分:0)

您可以使用Jquery解析xml来导航dom,例如http://jsfiddle.net/qd2xY/

var xml = '<docs><doc><str name="name">Rocky</str><str name="Last_name">balboa</str><str name="age">42</str><str name="sex">M</str><str name="dob">2012-09-09</str></doc><doc><str name="name">Rocky1</str></doc></docs>';


$(document).ready(function(){
    xmlDoc = $.parseXML(xml);
    $xml = $( xmlDoc ),    
    $xml.find('doc').each(function(){
       alert($(this).find('str[name="name"]').text())
    })
})

答案 3 :(得分:0)

你的xml格式不正确,也从不使用DOM遍历方法来解析它依赖于浏览器的XML,总是使用某种标准的解析器,例如:在jquery中你可以使用.parseXML,在你成功回调试试

 success : function(data) {
    var xml=data;
    xmlDoc = $.parseXML( xml ),
    $xml = $( xmlDoc );

    $.each($xml.find("str"),function(){
    alert($(this).attr("name"));
    });
}

DEMO