【问题标题】:jquery parse xml with unlimited child level categoryjquery解析具有无限子级类别的xml
【发布时间】:2015-04-20 19:13:30
【问题描述】:

我对使用 jquery 解析 xml 还很陌生,所以如果我的问题看起来很无聊,请原谅我。

我有一个 xml,它包含我的递归类别。其中有些有子类别,有些没有。它在子类别下有一些深层类别。

xml 示例;

<Urunler>
    <Urun>
        <ID>1</ID>
        <Parent>0</Parent>
        <Name>Red</Name>
    </Urun>
    <Urun>
        <ID>2</ID>
        <Parent>0</Parent>
        <Name>Green</Name>
    </Urun>
    <Urun>
        <ID>3</ID>
        <Parent>0</Parent>
        <Name>Blue</Name>
    </Urun>
    <Urun>
        <ID>4</ID>
        <Parent>3</Parent>
        <Name>Sky</Name>
    </Urun>
    <Urun>
        <ID>5</ID>
        <Parent>3</Parent>
        <Name>Sea</Name>
    </Urun>
    <Urun>
        <ID>6</ID>
        <Parent>5</Parent>
        <Name>Fish</Name>
    </Urun>
    <Urun>
        <ID>7</ID>
        <Parent>4</Parent>
        <Name>Bird</Name>
    </Urun>
</Urunler>

所需的 HTML 输出

<ul>
    <li>Red</li>
    <li>Green</li>
    <li>Blue
        <ul>
            <li>Sky
                <ul>
                    <li>Bird</li>
                </ul>
            </li>
            <li>Sea
                <ul>
                    <li>Fish</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

我在https://codereview.stackexchange.com/questions/43449/parsing-xml-data-to-be-put-onto-a-site-with-jquery 上找到了一个例子 不幸的是,它只支持第一个子级别。

如果需要; 我通过$.ajax调用我的xml

$.ajax({
   url: 'webservice/Resim/Kategori.xml',
   dataType: 'xml',
   cache:true,
   success: parseXml
});

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript jquery xml recursive-datastructures parsexml


    【解决方案1】:

    您必须遍历 Urun 元素,并附加到新 UL 元素中的正确位置

    function parseXml(xml) {
    
        var ul = $('<ul />');
    
        $(xml).find('Urun').each(function(index, item) {
            var parent = parseInt( $(this).find('Parent').text() , 10 );
            var li     = $('<li />', {
                text : $(this).find('Name').text(),
                id   : $(this).find('ID').text()
            });
    
            if (parent !== 0) {
                var parentEl = ul.find('li#' + parent);
    
                if ( parentEl.find('ul').length === 0 ) 
                    parentEl.append( $('<ul />') );
    
                parentEl.find('ul').append(li);
    
            } else {
                ul.append(li);
            }
    
        });
    
        $('body').append(ul);
    
    }
    

    FIDDLE

    【讨论】:

    • 谢谢你很好的解决方案,但我不能在你的解析函数中添加任何 html 标记。正如我在问题中提到的,我是 jquery 和解析 xml 的新手。
    • 例如:&lt;li data-id="4"&gt;&lt;a href="some-link"&gt;Sky&lt;/a&gt;&lt;li&gt;
    • 当然可以添加,但在 jQuery 中,您可以使用 li.append( $('&lt;a /&gt;', {href : "some-link"}) )
    • 非常感谢我现在做到了(:
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    相关资源
    最近更新 更多