从xml获取两级(层次结构数据)

时间:2014-08-07 20:26:50

标签: jquery xml

我有一个像这样的xml数据:

<pages>
  <page name=1>
    <page name=2>
        <page name=3>
            <page name=4>
            </page>
            <page name=5>
            </page>
        </page>
        <page name=6>
        </page>
    </page>
    <page name=12>
        <page name=3>
            <page name=4>
            </page>
            <page name=5>
            </page>
        </page>
        <page name=6>
        </page>
    </page>
  </page>
</page>
<page name = 13>
  <page name=11>
    <page name=2>
        <page name=3>
            <page name=4>
            </page>
            <page name=5>
            </page>
        </page>
        <page name=6>
        </page>
    </page>
  </page>
</pages>

我想得到名称属性的前两个级别的名称。

1,2,12,13,11

我试过了:

var results = [];
    $.ajax({
        type: "GET",
        url: "xx.xml",
        dataType: "text",
        success: function (xml) {
            if (typeof xml == 'string' || xml instanceof String) {
                var $doc = $.parseXML(xml);

                $($doc).find('page').each(function(){
                    results.push($(this).attr('name'));
                });
            }
        }
    });

我试过了:Accessing repeated XML tags at differing hierarchy levels in JavaScript 但是,我发现jQuery中的find()函数获取了所有页面; 我只想要层次结构树的前两级。 任何建议都表示赞赏。

来自SO的善良的人:

var results = [];
$.ajax({
    type: "GET",
    url: "pathwayHierarchy.xml",
    dataType: "text",
    success: function (xml) {
        if (typeof xml == 'string' || xml instanceof String) {
            var $doc = $.parseXML(xml);
            $($doc).find('pages').children().each(function(){
                results.push($(this).attr('name'));
                $(this).children().each(function(){
                    results.push($(this).attr('name'));
                });
            });
        }
    }
});

1 个答案:

答案 0 :(得分:0)

这会得到所要求的结果:

$($doc).find("pages > page, pages > page > page").each(function() {
   results.push($(this).attr('name'));
});

这将找到1或2层的所有页面元素。

或者,您可以使用我之前在评论中建议的children()。但我更喜欢单一的发现。