需要逻辑辅助 - JSON对象

时间:2013-11-16 15:28:23

标签: jquery xml json xhtml

我将以下XML解析为JSON:

XML

<categories>
    <cat id="0" caption="Category 0" img="">
    <cat id="1" caption="Category 1" img="">
        <cat pid="1" cid="0" caption="Sub Category 0" img="" />
        <cat pid="1" cid="1" caption="Sub Category 1" img="" />
    </cat>
    <cat id="2" caption="Category 2" img="">
        <cat pid="2" cid="0" caption="Sub Category 0" img="" />
        <cat pid="2" cid="1" caption="Sub Category 1" img="" />
    </cat>
</categories>

我使用jquery获得了以下内容,但它只适用于没有子猫的单只猫。

JQuery的

$.get("prop-cat.xml", function(xml) {
    var data = $.xml2json(xml);
    $.each(data, function() {
        $.each(this, function(i, value) {
            var outer = $('<div/>', {id: 'cat-' + value.cid, class: 'prop_cat'});
            var image = $('<div/>', {class: 'cat-image', src: value.img});
            var caption = $('<div/>', {class: 'cat-caption', text: value.caption});
            $(image).insertAfter($(caption));
            $(outer).append($(image));

            $(pb).append($(outer)); 
        });
    });
});

这里的任何人都有一个干净的解决方案,我不确定我应该如何为此编写逻辑。 我希望它能够解析任何和所有类别,无论它们在哪里。 就像我想要一个包含20个子类别的类别一样,它应该解析它们并在html中显示它们,但它也应该解析这些类别的孩子。

PFF!

由于

1 个答案:

答案 0 :(得分:0)

以下内容已修复:

function ParseCategories(i, value) {
    if (value.pid != undefined) {
        console.log('Child category ' + value.cid + ' parsed, parent: ' + value.pid + '.');
    } else {
        console.log('Category ' + value.id + ' parsed.');
    }

    //parse childs and run function again
    if (value.cat != undefined) {
        $.each(value.cat, function(i, child) {
            ParseCategories(i, child);
        });
    }
}

function loadProps() {
    //variables
    var pb = $('div#prop_browser');
    //parse prop categories
    console.log('Parsing Categories....');
    $.get("prop-cat.xml", function(xml) {
        var data = $.xml2json(xml);
        $.each(data, function() {
            $.each(this, function(i, value) {
                //parse category
                ParseCategories(i, value);
            });
        });
    });

}