jquery - How to get xml data

后端 未结 2 1108
一个人的身影
一个人的身影 2021-02-19 03:05

Im a total noob to html, css, javascript, and programming altogether. Please bear with me.

Im trying to populate my table using jquery. The data will be coming from an x

相关标签:
2条回答
  • 2021-02-19 03:33

    The sample XML:

    <?xml version="1.0" encoding="utf-8" ?>
        <RecentBooks>
         <Book>
          <Title>My Cool Book Title</Title>
        <Description>The my cool book is possibly the best cool book in that any developer could use to     be a great web designer.</Description>
        <Date>12/1/2010</Date>
        </Book>
        <Book>
         <Title>Another PHP book</Title>
        <Description>Learn everything about PHP with 'Another PHP book,' your ultimate guide to the ins and outs of PHP.</Description>
        <Date>4/1/2010</Date>
        </Book>
        <Book>
        <Title>jQuery Techniques</Title>
        <Description>jQuery techniques runs you through real life examples of jQuery from beginner to expert</Description>
         <Date>6/2/2010</Date>
         </Book>
         <Book>
        <Title>MySQL Database Book</Title>
        <Description>Brush up your knowledge with the best MySQL database book on the market.          </Description>
        <Date>14/2/2010</Date>
        </Book>
        </RecentBooks>
    

    And the HTML & jquery.

    $(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "books.xml",
        dataType: "xml",
        success: xmlParser
       });
    });
    
    function xmlParser(xml) {
    
    $('#load').fadeOut();
    
    $(xml).find("Book").each(function () {
    
        $(".main").append('<div class="book"><div class="title">' + $(this).find("Title").text() +   '</div><div class="description">' + $(this).find("Description").text() + '</div><div   class="date">Published ' + $(this).find("Date").text() + '</div></div>');
        $(".book").fadeIn(1000);
    
     });
    
    }
    
    <div class="main">
    <div align="center" class="loader"><img src="loader.gif" id="load" width="16" height="11"   align="absmiddle"/></div>
    </div>
    
     <div class="clear"></div>
    

    you can go through the example and you will get idea about the same

    0 讨论(0)
  • 2021-02-19 03:52

    I was in similar problem, where I was fetching XML data using HTTP GET and then parsing. Taking your example:

    $.ajax({
        type: "GET",
        url: "football_player.xml",
        ->dataType: "text",
        success: function(xml) {
            var parser = new DOMParser();
            var xmlDoc = parser.parseFromString(xml, "text/xml");
            var json = ->getJson(xmlDoc);
            for(var i =0; i< json[0].football_player.length;i++) {
                var player = json[0].football_player[i];
                $("table tbody").append("<tr>");
                $("table tbody").append("<td>" + ->player.name + "</td>");
                $("table tbody").append("<td>" + ->player.club + "</td>");
                $("table tbody").append("<td>" + ->player.number + "</td>");
                $("table tbody").append("<td>" + ->player.country + "</td>");
                $("table tbody").append("</tr>");
            }
        }
    });
    

    Three things to notice (->):

    1. dataType: "text" I made http request with data type as TEXT rather than XML, so that I get xml data as a string data type.

    2. getJson(xmlDoc) method: I wrote a small function to convert XML to Javascript object (JSON). There are other small utilities available to do the same.

    3. player.name: due to this conversion, you can use XML content as javascript objects and thus easier to parse and read.

    I am pasting getJson() function below (its not tested, I made it for a POC, but worked for me):

    function getJson(xmlDoc) {
        var result = [];
    
        for (var i = 0; i < xmlDoc.children.length; i++) {
            var child = xmlDoc.children[i];
            if (result[child.tagName] === undefined) {
                result[child.tagName] = [];
            }
    
            var nodeJson = getJsonFromNode(xmlDoc.children[i]);
            result[child.tagName].push(nodeJson);
        }
    
        return result;
    }
    
    function getJsonFromNode(node) {
        var nodeJson = {};
        // for attributes
        for (var i = 0; i < node.attributes.length; i++) {
            var att = node.attributes[i];
            nodeJson[att.localName] = att.value;
        }
    
        // for child nodes
        for (var i = 0; i < node.children.length; i++) {
            var child = node.children[i];
            if (nodeJson[child.tagName] === undefined) {
                nodeJson[child.tagName] = [];
            }
            var result = getJsonFromNode(node.children[i]);
            nodeJson[child.tagName].push(result);
        }
    
        return nodeJson;
    }
    
    0 讨论(0)
提交回复
热议问题