0

我有以下 XML 文件

<node title="Home" controller="Home" action="Index">
    <node title="Product Listing" controller="Listing" action="Index" >
      <node title="Product Detail" controller="Ad" action="Detail"  />
    </node>
    <node title="About Us" controller="AboutUs" action="Index"  />
    <node title="Contact Us" controller="Contact Us" action="Index"  />
    <node title="Place Your Order" controller="Order" action="Index"  >
      <node title="Order Placed" controller="Placed" action="Index"  />
    </node>
    <node title="FAQ" controller="FAQ" action="Index"  />
  </node>

我想以下列格式解析这些元素

首页 > 产品列表 > 产品详情

首页 > 下订单 > 下订单

首页 > 联系我们

首页 > 常见问题

首页 > 关于我们

我试图这样做,但它不能提供分层迭代。

  function GetChildNode1(xml) {
        $(xml).find('node').each(function (i) {
            nodeArray.push($(this).attr('title'));
            GetChildNode($(xml).find('node').eq(i));
        });
    }

我怎样才能做到这一点 。这是正确的 xml 格式以获得以下输出吗

4

1 回答 1

1

保持创建 XML 的顺序。

var string = '<node title="Home" controller="Home" action="Index"><node title="Product Listing" controller="Listing" action="Index" >  <node title="Product Detail" controller="Ad" action="Detail"  /></node><node title="About Us" controller="AboutUs" action="Index"  /><node title="Contact Us" controller="Contact Us" action="Index"  /><node title="Place Your Order" controller="Order" action="Index"  >  <node title="Order Placed" controller="Placed" action="Index"  /></node><node title="FAQ" controller="FAQ" action="Index"  /></node>'

var $doc = $.parseXML(string);
parse($($doc))

function parse($doc, array) {
    array = array || [];

    $doc.children('node').each(function () {
        var $this = $(this);
        array.push($this.attr('title'));

        if ($this.is(':has(node)')) {
            parse($this, array);
        } else {
            $('<li />', {
                text: array.join()
            }).appendTo('ul')
        }
        array.splice(array.length - 1, 1)
    })
}

演示:小提琴

于 2013-08-29T15:57:38.243 回答