如何使用jQuery解析XML字符串值?

时间:2010-06-09 06:57:21

标签: javascript xml jquery

我是jquery的新手。我试图使用jquery解析xml字符串。我找到了一个样本:

$(function () {
    $.get('data.xml', function (d) {
        var data = "";
        var startTag = "<table border='1' id='mainTable'><tbody><tr><td style=\"width: 120px\">Name</td><td style=\"width: 120px\">Link</td></tr>";
        var endTag = "</tbody></table>";
        $(d).find('url').each(function () {
            var $url = $(this);
            var link = $url.find('link').text();
            var name = $url.find('name').text();
            data += '<tr><td>' + name + '</td>';
            data += '<td>' + link + '</td></tr>';
        });
        $("#content").html(startTag + data + endTag);
    });
});

在这种情况下,我能够解析并从xml文件中获取值,但是现在我要查找的是不是从URL读取文件,我想从字符串中读取xml。比方说,我想解析一个由格式良好的xml组成的字符串而不是data.xml。

有没有人对此有任何想法?

提前致谢

编辑: 我在xml上尝试了一个示例代码;

<?xml version="1.0" encoding="utf-8" ?>
<Urls>
    <url>
        <name>google</name>
        <link>www.google.com</link>
    </url>
    <url>
        <name>aspdotnetcodebook</name>
        <link>http://aspdotnetcodebook.blogspot.com</link>
    </url>
</Urls>


当我在xml文件上尝试这个时,一切正常。但是当我切换到字符串时,它没有为link属性返回任何内容。我称之为;

$(function() {
            var data = $('<?xml version="1.0" encoding="utf-8" ?><Urls><url><name>google</name><link>www.google.com</link></url><url><name>aspdotnetcodebook</name><link>http://aspdotnetcodebook.blogspot.com</link></url></Urls>');
            alert(data);
            doWhateverItIsYourDoing(data);
           });

我无法诊断为什么会发生这种情况。

4 个答案:

答案 0 :(得分:4)

直接传递字符串?

function doWhateverItIsYoureDoing(xml) {
    var data = "";
    var startTag = "<table border='1' id='mainTable'><tbody><tr><td style=\"width: 120px\">Name</td><td style=\"width: 120px\">Link</td></tr>";
    var endTag = "</tbody></table>";
    $(xml).find('url').each(function() {
        var $url = $(this);
        var link = $url.find('link').text();
        var name = $url.find('name').text();
        data += '<tr><td>' + name + '</td>';
          data += '<td>' + link + '</td></tr>';
     });
    $("#content").html(startTag + data + endTag);
}

你的.get可以改写为:

 $.get('data.xml',doWhateverItIsYoureDoing );

如果你已经在字符串中有xml,那么

 var data = "<?xml version=\"1......";
 doWhateverItIsYoureDoing(data);

答案 1 :(得分:1)

只需将格式良好的XML字符串放入jQuery对象:

var xml = "<?xml version=\"1.0\"?><Dialog><Adam Emotion=\"strong\">I love you!</Adam><Eva Emotion=\"low\">I love you, too!</Eva></Dialog>";

使用

进行访问
alert($(xml).find('Adam').text());

alert($(xml).find('Adam').attr('Emotion'));

答案 2 :(得分:1)

将XML字符串放入javascript变量

var xmlString = $(‘<?xml version=”1.0″?><Customers><Customer Name=”Allan Border”           Age=”26″ ContactNumber=”004416165245″ Address=”Unit # 24 East London” City=”London”  Country=”England”></Customer><Customer Name=”Jennifer” Age=”28″ ContactNumber=”004416165248″ Address=”Unit # 28 West London” City=”London” Country=”England”></Customer></Customers>’);

现在,您可以将XML解析为遍历每个客户节点......

$(xmlString).find("Customer").each(function () {
 var customerName = $(this).attr("Name");
 var age = $(this).attr("Age");
 var contactNumber = $(this).attr("ContactNumber");
 var address = $(this).attr("Address");
 var city = $(this).attr("City");
 var country = $(this).attr("Country");
 });

答案 3 :(得分:1)

请注意,要正确解析任何类型的XML文件,您需要使用parseXML()函数,如下所示:

var xml_jquery_object = jQuery.parseXML(xml);

当您按照其他答案中的说明执行操作时:

var html_jquery_object = jQuery(xml);

你要求jQuery解析HTML而不是XML。最大的区别是HTML删除了一些标签(body,html,head ...)并期望某些标签为空(br,hr,...)。因此,如果XML文件以某种方式包含此类标记,则可能会破坏XML文件的解析。

当然,

xml也可以是直接字符串。无论如何,AJAX .get()函数都会向函数返回一个字符串。 (更好的.ajax()函数可以直接返回XML对象。)因此,您可以在该变量中定义任何XML代码,如下所示:

xml = "<?xml version='1.0'?><test>...</test>";