Consider this problem:
Using Javascript/E4X, in a non-browser usage scenario (a Javascript HL7 integration engine), there is a variable holding an XML snippet that could have multiple repeating nodes.
<pets>
<pet type="dog">Barney</pet>
<pet type="cat">Socks</pet>
</pets>
Question: How to get the count of the number of pet nodes in Javascript/E4X ?
EDIT: To clarify, this question should be around E4X (ECMAScript for XML). Apologies to those who answered without this information. I should have researched & posted this info beforehand.
Consider this problem:
Using Javascript/E4X, in a non-browser usage scenario (a Javascript HL7 integration engine), there is a variable holding an XML snippet that could have multiple repeating nodes.
<pets>
<pet type="dog">Barney</pet>
<pet type="cat">Socks</pet>
</pets>
Question: How to get the count of the number of pet nodes in Javascript/E4X ?
EDIT: To clarify, this question should be around E4X (ECMAScript for XML). Apologies to those who answered without this information. I should have researched & posted this info beforehand.
Share Improve this question edited Jul 22, 2009 at 15:27 p.campbell asked Jul 21, 2009 at 22:38 p.campbellp.campbell 101k70 gold badges262 silver badges326 bronze badges 1- Do you at least have access to a DOM API? – Ionuț G. Stan Commented Jul 21, 2009 at 22:57
3 Answers
Reset to default 5Use an E4X XML object to build an XMLList of your 'pet' nodes. You can then call the length method on the XMLList.
//<pets>
// <pet type="dog">Barney</pet>
// <pet type="cat">Socks</pet>
//</pets>
// initialized to some XML resembling your example
var petsXML = new XML("");
// build XMLList
var petList = petsXML['pet'];
// alternative syntax
// var petList = petsXML.pet;
// how many pet nodes are under a given pets node?
var length = petList.length();
I'd say... use jQuery!
var count = 0;
$(xmlDoc).find("pet").each(function() {
count++;
// do stuff with attributes here if necessary.
// var pet = $(this);
// var myPetType = pet.attr("type");
};
});
EDIT: Can't use jquery... ok, let's do it in regular javascript :(
var pets= xmlDoc.getElementsByTagName("pet");
for ( var i = 0; i < pets.length ; i++ )
{
count++;
// var petObj = {
// pets[i].getAttribute("type")
// };
}
Using the DOM you can call getElementsByTagName()
.
alert( document.getElementsByTagName( "pet" ).length );
More information:
https://developer.mozilla.org/en/DOM:element.getElementsByTagName
You're going to need to obtain the XML document somehow. XHR, for example, returns documents as parsed XML.
var xhr = new XMLHttpRequest();
xhr.open( 'GET', 'http://domain.com/pets.xml', true );
xhr.onreadystatechange = function ( e ) {
if ( xhr.readyState == 4 && xhr.status == 200 )
alert( xhr.responseXML.getElementsByTagName( "pet" ).length );
};
xhr.send( null );