SoftXMLLib support single method for query xml:

selectNodes method takes XPATHexpression as argument andreturns arrayof selectednodes with all attributes

var softXMLLib= new SoftXMLLib();

var xmlString = "<root>";

xmlString +="<person id='1' weight='100kg' height='180cm'>";

xmlString +="<FirstName>Gregory</FirstName>";

xmlString +="<LastName>Movsesyan</LastName>";

xmlString +="<Email ext='international'>webmaster@softxml.com</Email>";

xmlString +="</person>";

 

xmlString +="<person id='2' weight='67kg' height='167cm'>";

xmlString +="<FirstName>Michal</FirstName>";

xmlString +="<LastName>Doyan</LastName>";

xmlString += "<Email ext= 'local'>webmaster@test.com</Email>";  xmlString + = "</person>";  xmlString += "</root>";

softXMLLib.loadXML(xmlString); 
if(softXMLLib.loadXMLError!=0){
	 alert("Invalid XML string!");
}
else{
	 fnames = softXMLLib.selectNodes("//FirstName");
	 for(i=0;i<fnames.length;i++) {
		alert(fnames[i].innerText);
		//Will output "Gregory","Michal"
 
		alert(fnames[i].self.getElementsByTagName("LastName")[0].childNodes[0].nodeValue);
		//Will output "Movsesyan","Doyan"
	 }
 
	 persons = softXMLLib.selectNodes("//person");
	 for(i=0;i<persons.length;i++) {
		 alert(persons[i].attributes[0].id);
		 //Will output "1","2"
 
		 alert(persons[i].attributes[0].weight);
		 //Will output "100kg","67kg"
 
		 alert(persons[i].self.getElementsByTagName("Email")[0].childNodes[0].nodeValue);
		 
 
		alert(persons[i].self.getElementsByTagName("Email")[0].getAttribute("ext"));
		 //Will output "international","local"
	 }
 }