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

Get a XML by using AJAX then parse it into JSON (without server)

本文关键字:JSON 服务器 XML 获取 AJAX 然后 使用      更新时间:2023-09-26

我向我正在处理的小代码寻求帮助。但是我不擅长AJAX和Jquery...所以这是我的主题:我想获取一个带有外部XML文件的XML(这里是text.xml),并使用David Walsh的代码将其解析为JSON对象(来源: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。所以我有问题:

  • -你能给大卫沃尔什的代码一个数组吗?
  • -我们可以在 AJAX 的成功部分执行多个功能吗?
  • -我的JSON对象可以按系列拆分吗?(我给出XML就在你会看到系列1,系列2,系列3之后)
  • -我可以将数字(Json对象)与数字进行比较吗? (例如 text.num == 1

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

还有文字.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,我知道这将是更好,更简单的方法。希望您对我的问题有答案,并感谢您的阅读。

所以我让 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 只是为了测试,我刚刚在不同的数组上解析了它们以处理它们。