使用AJAX获取XML然后将其解析为JSON(无服务器)

时间:2016-04-26 13:56:21

标签: javascript jquery json ajax xml

我向我正在处理的一些代码寻求帮助。 但我对AJAX和Jquery并不擅长......所以这就是我的主题:我想获得一个带有外部XML文件的XML(这里是text.xml)并将其解析为一个JSON对象David Walsh的代码(来源:https://davidwalsh.name/convert-xml-json)。 然后有人说这个功能只能在"成功"这就是为什么我在其上做所有功能的原因。 所以我的目标是让我的XML成为JSON对象,我可以更轻松地对待它,我找到一些论坛主题可以回答我的问题,但我的代码不起作用,我不知道为什么......如果你可以帮我谢谢。 有我的代码:

 <HTML>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>testSelection</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
</head>

<body>

    <body>
        <div id="Div_XML"></div>
    </body>

    <script>
        var xml = $.parseXML('<bds> <serie1 id="1"> <desc> <num> 2 </num><title>we are on 1 </title><commen>HI </commen><URL>Idk</URL></desc><desc><num> 1 </num><title>we are on  2 </title><commen>Hello world </commen><URL>Baptiste</URL></desc></serie1></bds>')
        var results = new Array;
        var obj = {};


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

                                var commen = $(this).find('commen').text();
                                var title = $(this).find('title').text();
                                var URL = $(this).find('URL').text();
                                var num = $(this).find('num').text();

                                $(xml).find('bds').each(

                                    function() {
                                        results.push({
                                            id: $(this).attr('id'),
                                            num: num,
                                            commen: commen,
                                            title: title,
                                            URL: URL});
                                        });
                                        // Changes XML to JSON


                                            // Create the return object
                                         function parseX(results){    

                                            if (results.nodeType == 1) { // element
                                                // do attributes
                                                if (results.attributes.length > 0) {
                                                    obj["@attributes"] = {};
                                                    for (var j = 0; j < results.attributes.length; j++) {
                                                        var attribute = results.attributes.item(j);
                                                        obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
                                                    }
                                                }
                                            } else if (results.nodeType == 3) { // text
                                                obj = results.nodeValue;
                                            }

                                            // do children
                                            if (results.hasChildNodes()) {
                                                for (var i = 0; i < results.childNodes.length; i++) {
                                                    var item = results.childNodes.item(i);
                                                    var nodeName = item.nodeName;
                                                    if (typeof(obj[nodeName]) == "undefined") {
                                                        obj[nodeName] = xmlToJson(item);
                                                    } else {
                                                        if (typeof(obj[nodeName].push) == "undefined") {
                                                            var old = obj[nodeName];
                                                            obj[nodeName] = [];
                                                            obj[nodeName].push(old);

                                                        }
                                                        obj[nodeName].push(xmlToJson(item));
                                                    }
                                                }
                                            }



                                        // Assuming xmlDoc is the XML DOM Document
                                        var jsonText = JSON.stringify(xmlToJson(results));
                                        alert(jsonText);
                                        }
                                        }
                                    )
                                };
                            }
                        }
                    )
    </script>
</body>

</HTML>

所以我的想法是将所有xml数据推入数组,然后将其解析为json。 所以我有疑问:

  • - 你能给David Walsh代码一个数组吗?
  • - 我们可以在AJAX的成功部分中执行多个功能吗?
  • - 我的JSON对象可以按系列分割吗? (我会在看到serie1,serie2,serie3之后给出xml)
  • - 我可以将num(Json对象)与数字进行比较吗? (例如text.num == 1 for example)

对不起我的初学者问题......

和text.xml

   <?xml version="1.0" encoding="iso-8859-1"?>
<bds>
        <serie1 id="1">
                <desc>
                        <num> 1 </num>
                        <title>nous sommes sur le lien 1 </title>
                        <commen>Hello </commen>
                        <URL>Baptiste</URL>
                </desc>
                <desc>
                        <num> 2 </num>
                        <title>nous sommes sur le lien 2 </title>
                        <commen>HI </commen>
                        <URL>Baptiste</URL>
                </desc>
                <desc>
                        <num> 3 </num>
                        <title>nous sommes sur le lien 3 </title>
                        <commen>How are you  </commen>
                        <URL>Gars inconnu</URL>
                </desc>
                <desc>
                        <num> 4 </num>
                        <title>nous sommes sur le lien 4 </title>
                        <commen>Idk  </commen>
                        <URL>Raymond</URL>
                </desc>
                <desc>
                        <num> 5 </num>
                        <title>nous sommes sur le lien 5 </title>
                        <commen>Thank you </commen>
                        <URL>Eric</URL>
                </desc>
                <desc>
                        <num> 6 </num>
                        <title>nous sommes sur le lien 6 </title>
                        <commen>You're welcome  </commen>
                        <URL>Baptiste</URL>
                </desc>
                <desc>
                        <num> 7 </num>
                        <title>nous sommes sur le lien 7 </title>
                        <commen>Sorry </commen>
                        <URL>Céline</URL>
                </desc>
        </serie1>
            <serie2 id="2">
                <desc>
                        <num> 1 </num>
                        <title>nous sommes sur le lien 1 </title>
                        <commen>Hello </commen>
                        <URL>Baptiste</URL>
                </desc>
                <desc>
                        <num> 2 </num>
                        <title>nous sommes sur le lien 2 </title>
                        <commen>HI </commen>
                        <URL>Baptiste</URL>
                </desc>
                <desc>
                        <num> 3 </num>
                        <title>nous sommes sur le lien 3 </title>
                        <commen>How are you  </commen>
                        <URL>Gars inconnu</URL>
                </desc>
                <desc>
                        <num> 4 </num>
                        <title>nous sommes sur le lien 4 </title>
                        <commen>Idk  </commen>
                        <URL>Raymond</URL>
                </desc>
                <desc>
                        <num> 5 </num>
                        <title>nous sommes sur le lien 5 </title>
                        <commen>Thank you </commen>
                        <URL>Eric</URL>
                </desc>
                <desc>
                        <num> 6 </num>
                        <title>nous sommes sur le lien 6 </title>
                        <commen>You're welcome  </commen>
                        <URL>Baptiste</URL>
                </desc>
                <desc>
                        <num> 7 </num>
                        <title>nous sommes sur le lien 7 </title>
                        <commen>Sorry </commen>
                        <URL>Céline</URL>
                </desc>
        </serie2>
            <serie3 id="3">
                <desc>
                        <num> 1 </num>
                        <title>nous sommes sur le lien 1 </title>
                        <commen>Hello </commen>
                        <URL>Baptiste</URL>
                </desc>
                <desc>
                        <num> 2 </num>
                        <title>nous sommes sur le lien 2 </title>
                        <commen>HI </commen>
                        <URL>Baptiste</URL>
                </desc>
                <desc>
                        <num> 3 </num>
                        <title>nous sommes sur le lien 3 </title>
                        <commen>How are you  </commen>
                        <URL>Gars inconnu</URL>
                </desc>
                <desc>
                        <num> 4 </num>
                        <title>nous sommes sur le lien 4 </title>
                        <commen>Idk  </commen>
                        <URL>Raymond</URL>
                </desc>
                <desc>
                        <num> 5 </num>
                        <title>nous sommes sur le lien 5 </title>
                        <commen>Thank you </commen>
                        <URL>Eric</URL>
                </desc>
                <desc>
                        <num> 6 </num>
                        <title>nous sommes sur le lien 6 </title>
                        <commen>You're welcome  </commen>
                        <URL>Baptiste</URL>
                </desc>
                <desc>
                        <num> 7 </num>
                        <title>nous sommes sur le lien 7 </title>
                        <commen>Sorry </commen>
                        <URL>Céline</URL>
                </desc>
        </serie3>
</bds>

我使用var xml在本地进行测试,但是当我需要从文件中获取XML时,我完全丢失了。 然后我不会在开头使用JSON而不是XML,因为我希望稍后我的项目写入它并且我在JSON中读到它是不可能的...... 顺便说一句,我不能使用XmlHTTPRequest和PHP,我知道这将是更好,更简单的方法... 希望你能回答我的问题并感谢你的阅读。

1 个答案:

答案 0 :(得分:0)

所以我让AJAX失效,改为使用它:

    // File: readXML.js

var i; 
var LinkNum = new Array;
var LinkCommen = new Array ;
var LinkURL = new Array;
var LinkTitle = new Array; 
var tab = new Array; 

$(document).ready(function(){ 

    // Open the students.xml file
    $.get("text.xml",{},function(xml){

        // Build an HTML string
        myHTMLOutput = '';
        myHTMLOutput += '<table width="98%" border="1" cellpadding="0" cellspacing="0">';
        myHTMLOutput += '<th>LinkTitle</th><th>LinkCommen</th><th>LinkURL</th><th>LinkNum</th>';

        // Run the function for each student tag in the XML file

        $('bds',xml).each(function() {

            $(this).children().each(function(){

                $(this).children().each(function() {

                    LinkNum.push($(this).children("num").text());
                    LinkCommen.push( $(this).children("commen").text());
                    LinkURL.push($(this).children("URL").text());
                    LinkTitle.push($(this).children("title").text());

                });


            });

            // Build row HTML data and store in string
                mydata = BuildStudentHTML(LinkNum,LinkCommen,LinkURL,LinkTitle);
                myHTMLOutput = myHTMLOutput + mydata;
        });
        myHTMLOutput += '</table>';

        // Update the DIV called Content Area with the HTML string
        $("#ContentArea").append(myHTMLOutput);
    });
});



 function BuildStudentHTML(LinkNum,LinkCommen,LinkURL,LinkTitle){

    // Check to see if their is a "post" attribute in the name field
    // Build HTML string and return
    for (i=0;i<10;i++)
    {
    if (LinkNum[i]==6) 
    {
    output = '';
    output += '<tr>';
    output += '<td>'+ LinkTitle[i] +'</td>';
    output += '<td>'+ LinkCommen[i] +'</td>';
    output += '<td>'+ LinkURL[i] +'</td>';
    output += '<td>'+ LinkNum[i] +'</td>';
    output += '</tr>';
        return output;
    }

    }
}

来源:http://www.compoc.com/tuts/

所以基本上我在一个数组中返回我的节点,现在我遇到了一个问题,因为我拿了我的XML的第二和第三系列,但我检索了我在xml上写的内容。 PS:我只是在函数LinkNum == 6中用于测试,我刚才在不同的数组上解析它们以便对它们进行处理。