我有以下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>
我想用以下格式解析这些元素
主页&gt;产品清单&gt;产品详情
主页&gt;下订单&gt;已下订单
主页&gt;联系我们
主页&gt;常见问题
主页&gt;关于我们
我试图这样做,但它无法进行分层迭代。
function GetChildNode1(xml) {
$(xml).find('node').each(function (i) {
nodeArray.push($(this).attr('title'));
GetChildNode($(xml).find('node').eq(i));
});
}
我该怎么办?是这种正确的xml格式来获得以下输出
答案 0 :(得分: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)
})
}
演示:Fiddle