jQuery获取嵌套的XML列表并作为HTML发布

时间:2015-12-15 19:10:27

标签: jquery xml xml-parsing

我正在尝试从xml列表中获取项目并打印为html页面。 有一个小问题。您可以在此处查看问题:http://daisy.unlu.co/handshake_api/

应该有2行我不知道为什么有6行。我打印sku,描述,价格和图像网址。如您所见,变体有相同的图像网址,不同的价格,不同的描述和不同的sku。

<?xml version='1.0' encoding='utf-8'?>
<response>
    <objects type="list">
        <object type="hash">

            <imageURL>
                http://5387f51cd2471f8fea9a-807406182e5fe44c6ce394326aa32939.r89.cf2.rackcdn.com/image/189589cd5409c29b9efa1281d66b41bba0c101d6.jpg
            </imageURL>

            <variants type="list">

                <object type="hash">
                    <sku>IRIS3-1</sku>
                    <dimensions type="list">
                        <object type="hash">
                            <dimension>Dimension</dimension>
                            <value>Irish Spring Bar Soap-1 (3 x 3.75 Oz) x 18</value>
                        </object>
                    </dimensions>
                    <unitPrice>31.00</unitPrice>
                </object>

                <object type="hash">
                    <sku>IRIS3-2</sku>
                    <dimensions type="list">
                        <object type="hash">
                            <dimension>Dimension</dimension>
                            <value>Irish Spring Bar Soap-2 (3 x 3.75 Oz) x 18</value>
                        </object>
                    </dimensions>
                    <unitPrice>32.00</unitPrice>
                </object>

            </variants> 
        </object>
    </objects>
</response>

XML列表

$(document).ready(function(){ 

    $.get("items2.xml",{},function(xml){    
        // Build an HTML string
        myHTMLOutput = '';
        myHTMLOutput += '<table width="100%" border="1" cellpadding="0" cellspacing="0">';
        myHTMLOutput += '<th>SKU</th><th>Description</th><th>Price</th><th>Image</th>';
        var mydata = " "; 
        var imageURL = " ";
        var sku = " ";
        var name = " ";
        var unitPrice = " ";


        $('objects object',xml).each(function(i) {
            imageURL = $(this).find("imageURL").text();
            //var sku;
            //var name;
            //var unitPrice;
            $(this).find('variants object').each(function(){

                sku = $(this).find("sku").text();
                name = $(this).find('dimensions object value').text();
                unitPrice = $(this).find("unitPrice").text();
                //console.log(unitPrice);
                mydata = BuildStudentHTML(sku,name, unitPrice,imageURL);
                myHTMLOutput = myHTMLOutput + mydata;
            });


            // Build row HTML data and store in string

        });
        myHTMLOutput += '</table>';

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

function BuildStudentHTML(sku, name, unitPrice, imageURL){
   output = '';
   output += '<tr>';
   output += '<td>'+ sku + '</td>';
   output += '<td>'+ name +'</td>';
   output += '<td>'+ unitPrice +'</td>';
   output += '<td>'+ imageURL +'</td>';
   output += '</tr>';
   return output;
}

1 个答案:

答案 0 :(得分:1)

在循环同名嵌套节点时,尝试使用直接子选择器>$('objects > object')。这将选择object的直接子节点objects节点。

$('objects object')将选择objectobjects节点的子节点和variants节点的嵌套子节点。它基本上是#34;在object嵌套或其他情况下给我所有objects个节点。&#34;

如果没有一个有效的jsFiddle示例,很难调试它,所以如果它不起作用,不要贬低我。