Javascript jQuery XML:计算叶节点数
我如何使用jQuery计算从特定XML节点中产生的叶节点数? 所讨论的XML与此类似。我希望所有叶节点都来自Javascript jQuery XML:计算叶节点数,javascript,jquery,xml,Javascript,Jquery,Xml,我如何使用jQuery计算从特定XML节点中产生的叶节点数? 所讨论的XML与此类似。我希望所有叶节点都来自节点 <Errors> <ErrorParentCat> <ErrorTag/> <ErrorTag2/> </ErrorParentCat> </Errors> 在本例中,我希望只计算和。因此,结果应该是2。另外,是一个示例标记,在中可能有许多具有不同名称的标记
节点
<Errors>
<ErrorParentCat>
<ErrorTag/>
<ErrorTag2/>
</ErrorParentCat>
</Errors>
在本例中,我希望只计算
和
。因此,结果应该是2
。另外,
是一个示例标记,在
中可能有许多具有不同名称的标记
一旦我有了号码,如果可能的话,我也想要这些叶节点的列表。假设您已经有一个名为
xml
的XMLDocument
:
var $xml = $(xml),
count = $xml.find('*').filter(function ()
{
return $(this).children().length === 0;
}).length;
console.log(count);
您也可以直接将XML字符串传递给jQuery函数:
var $xml = $('<Errors><ErrorParentCat><ErrorTag/><ErrorTag2/></ErrorParentCat></Errors>');
// the rest is the same
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;
}
Edit#2正如Tim Down所指出的(参见下面的评论),您不能在IE(!@#ing IE)中将XML字符串传递给$()
。您应该使用jQuery 1.5函数将任意格式良好的XML字符串解析为XMLDocument
:
var xmlDoc = $.parseXML('<Errors><ErrorParentCat><ErrorTag/><ErrorTag2/></ErrorParentCat></Errors>'),
$xml = $(xmlDoc);
/* the rest is unchanged */
var xmlDoc=$.parseXML(“”),
$xml=$(xmlDoc);
/*其余的不变*/
假设您已经有一个名为
xml
的XMLDocument
:
var $xml = $(xml),
count = $xml.find('*').filter(function ()
{
return $(this).children().length === 0;
}).length;
console.log(count);
您也可以直接将XML字符串传递给jQuery函数:
var $xml = $('<Errors><ErrorParentCat><ErrorTag/><ErrorTag2/></ErrorParentCat></Errors>');
// the rest is the same
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;
}
Edit#2正如Tim Down所指出的(参见下面的评论),您不能在IE(!@#ing IE)中将XML字符串传递给$()
。您应该使用jQuery 1.5函数将任意格式良好的XML字符串解析为XMLDocument
:
var xmlDoc = $.parseXML('<Errors><ErrorParentCat><ErrorTag/><ErrorTag2/></ErrorParentCat></Errors>'),
$xml = $(xmlDoc);
/* the rest is unchanged */
var xmlDoc=$.parseXML(“”),
$xml=$(xmlDoc);
/*其余的不变*/
有很多方法可以做到这一点:
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加载函数:
var $xml = $('<Errors><ErrorParentCat><ErrorTag/><ErrorTag2/></ErrorParentCat></Errors>');
// the rest is the same
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;
}
有很多方法可以做到这一点:
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加载函数:
var $xml = $('<Errors><ErrorParentCat><ErrorTag/><ErrorTag2/></ErrorParentCat></Errors>');
// the rest is the same
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;
}
谢谢,但是我应该指定,
ErrorParentCat
是一个例子,虽然可能有很多种,除了那一点点之外,它还不错:)谢谢,但是我应该指定,ErrorParentCat
是一个例子,虽然可能有很多种,除了那一点点之外,它还不错:)为答案干杯,在我看到你的更新之前,我自己修改了代码:)@Chris:我想这不是你所能理解的,但我会尽可能清楚地回答。不客气。不,不能将XML直接传递到jQuery函数中。jQuery假定它处理的是HTML,而不是将其解析为XML。然而,jQuery1.5确实有一个parseXML()
方法:@Tim:您可能会注意到我发布的JSFIDLE示例工作正常,并且完全按照您所说的做。也就是说,您可能认为最好在IE中使用$.parseXML()
@Matt:不是这样。说真的,建议使用$()
解析XML是不好的:它不是为解析XML而设计的,它不工作,jQuery现在提供了一个函数来完成它。为答案喝彩,在看到您的更新之前我自己修改了代码:)@Chris:我想这并不超出您的能力范围,但我会尽可能清楚地回答。不客气。不,不能将XML直接传递到jQuery函数中。jQuery假定它处理的是HTML,而不是将其解析为XML。然而,jQuery1.5确实有一个parseXML()
方法:@Tim:您可能会注意到我发布的JSFIDLE示例工作正常,并且完全按照您所说的做。也就是说,您可能认为最好在IE中使用$.parseXML()
@Matt:不是这样。说真的,建议使用$()
解析XML是不好的:它不是为解析XML而设计的,它不起作用,jQuery现在提供了一个函数来解析XML。