使用命名空间和属性从xml文件中创建html的问题

时间:2014-06-23 22:42:53

标签: jquery ajax xml namespaces

我在为AJAX项目使用外部XML文件时遇到了问题。 当我将AJAX变量XML更改为XML的内容时,我得到了正确的输出。 但是下面代码的输出是“未定义的”。 我做错了什么?

html& AJAX代码

<html>
<head><title>xml file in jquery</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body>

 <table>
 </table>

<script>


$(document).ready( function() {
    Dataextract();
    fetch();
});

function fetch() {

        setTimeout( function() {
        corporateData();
        fetch();
    }, 10000);

}

function Dataextract() {

    $.ajax({ 
    type: "GET",
     url: "test.xml",
     dataType: "xml",    
     success: function(xml) {


 $("table").children().remove();

      $(xml).find("feed").each( function() {

    var $entry = $(this);
       var mydata = $entry.find('w\\:entry').attr('w:date');

 document.write(mydata);

       $("table").append(info);

      });

     },
    }); 
};

</script>
</body>
</html>

我的外部XML文件('test.xml')如下所示:

<rsp><feed><w:entry w:date="2012-08-15" w:circulation="154" w:hits="538" w:downloads="0" w:reach="30"/></feed></rsp>

2 个答案:

答案 0 :(得分:0)

我认为问题在于试图双重逃避':'。试试这个:

var mydata = $entry.find('w\:entry').attr('w\:date');

要么问题或者问题是你没有逃避属性名称?我没有在使用jQuery进行Xml解析时使用名称空间,但这可能是另一种解决方案:

var mydata = $entry.find('w\\:entry').attr('w\\:date');

或者,如果这没有帮助,请尝试添加一些调试代码并使用console.log。我会从这开始:

var mydata = $entry.find('w\:entry');
console.log(mydata);
console.log(mydata.length);

至少会告诉你你的find表达是否正常。

我不确定你是否想要解决这个问题,但正如评论中提到的那样,你在尝试附加到该表时会遇到一些问题。

首先,如上所述,您没有声明“info”变量。其次,您从Xml中提取的唯一内容是日期(字符串)。试图将其附加到$('table'),你不会有任何运气。您需要使用document.createElement添加行+单元格,或者构建包含该信息的Html字符串。

即:

jQuery('table').append(
    jQuery(document.createElement('tr')).append(
        jQuery(document.createElement('td')).text('your value')
    )
);

jQuery('table').append('<tr><td>yourvalue</td></tr>');

答案 1 :(得分:0)

似乎解析这个xml很棘手。

这至少在Chrome中适用于我:var mydata = $entry.find('entry').attr('w:date');

所以你可以不用w\\: