代码之家  ›  专栏  ›  技术社区  ›  VJOY

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

  •  1
  • VJOY  · 技术社区  · 16 年前

    我是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文件上尝试这个方法时,一切都正常。但当我切换到string时,它不会为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 回复  |  直到 13 年前
        1
  •  4
  •   Dan Heberden    16 年前

    直接把绳子传过来?

    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);
    
        2
  •  1
  •   jAndy    16 年前

    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'));
    
        3
  •  1
  •   Bill the Lizard    14 年前

    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>’);
    

    $(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");
     });
    
        4
  •  1
  •   Alexis Wilke    11 年前

    请注意,要正确解析任何类型的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 当然,也可以是直接字符串。阿贾克斯 .get() 函数仍然会向函数返回一个字符串(更好的 .ajax() 函数可以直接返回XML对象。)因此您可以在该变量中定义任何XML代码,如下所示:

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