如何使用jQuery计算来自特定XML节点的叶节点数?
有问题的XML看起来与此类似。我希望所有叶节点都离开<Errors>
节点。
<Errors>
<ErrorParentCat>
<ErrorTag/>
<ErrorTag2/>
</ErrorParentCat>
</Errors>
在此示例中,我只想计算<ErrorTag/>
和<ErrorTag2/>
。因此结果应为2
。另外<ErrorParentCat>
是一个示例标记,<Errors>
中可能有许多名称不同。
如果有了数字,我也想要这些叶子节点的列表,如果可能的话。
答案 0 :(得分:3)
假设您已经有一个名为XMLDocument
的{{1}}:
xml
您也可以直接将XML字符串传递给jQuery函数:
var $xml = $(xml),
count = $xml.find('*').filter(function ()
{
return $(this).children().length === 0;
}).length;
console.log(count);
编辑 您说您想要一个这些叶节点的列表。在上面的代码中,您已经获得了它们:
var $xml = $('<Errors><ErrorParentCat><ErrorTag/><ErrorTag2/></ErrorParentCat></Errors>');
// the rest is the same
正如Tim Down所指出的那样 编辑#2 (请参阅下面的评论),您不能只将XML字符串传递给IE中的var $xml = /* whatever */,
$leafNodes = $xml.find('*').filter(function ()
{
return $(this).children().length === 0;
}),
count = $leafNodes.length;
(!@ #$ ing IE)。您应该使用jQuery 1.5函数$.parseXML()
将任意格式良好的XML字符串解析为$()
:
XMLDocument
答案 1 :(得分:1)
有很多方法可以做到这一点:
var countThem = 0;
jQuery.ajax({
type: "GET",
url: 'blahblah.xml',
dataType: ($.browser.msie) ? "text/xml" : "xml",
success: function(xml) {
var xml2 = load_xml(xml);
$(xml2).find('Errors').each(function(){
$(xml2).find('ErrorParentCat').each(function(){
alert($(this).text()); //alert the contents
countThem++;
});
});
alert(countThem); //alert the total number
}
});
和XML加载函数:
function load_xml(msg) {
if ( typeof msg == 'string') {
if (window.DOMParser)//Firefox
{
parser=new DOMParser();
data=parser.parseFromString(text,"text/xml");
}else{ // Internet Explorer
data=new ActiveXObject("Microsoft.XMLDOM");
data.async="false";
data.loadXML(msg);
}
} else {
data = msg;
}
return data;
}