1

I am trying to extract values from the xml document and print them. I also want to count the number of children(child nodes) each node has.That is the first tag has 2 child and second tag has 3.

THIS IS THE XML DOCUMENT

<?xml version="1.0" ?> 
  <A>
  <a1>a1</a1> 
  <a2>a2</a2> 
  <B>
  <C>2</C> 
  <C>3</C> 
  </B>
  <B>
  <C>4</C> 
  <C>5</C> 
  <C>6</C>
  </B>
  </A>

THIS IS MY JAVASCRIPT DOCUMENT

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.open("GET","extractexample.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
xmlObj=xmlDoc.documentElement;
document.write(xmlDoc.getElementsByTagName("B")[0].childNodes[0].nodeValue);
4
  • What is the issue you are facing? Commented Mar 24, 2011 at 6:25
  • Are you getting the AJAX result? I mean, XML file in your xmlhttp.responseXML. Check with firebug. Commented Mar 24, 2011 at 7:51
  • hi if i write document.write(xmlDoc.getElementsByTagName("C").length); This counts the total number of tags I get the output as 5 whichis correct but i want to seperately count number of child nodes of each tag . I dont know what code shall i write for it. Commented Mar 24, 2011 at 7:59
  • please edit your question to include your last comment Commented Mar 24, 2011 at 9:47

1 Answer 1

3

Element.childNodes method returns all types of nodes, including whitespace textnodes. It may not be what you want. If you only care for the number of child elements, use childElementCount.

var b = xmlDoc.getElementsByTagName("B")[0];
alert(b.childElementCount); //should output 2

I haven't tried in IE, it may not work. Else, if you want a the element list, use children children not supported on non HTML doc. You can try this function:

function getChildren(element) {
  var nodes = element.childNodes;
  var children = [];
  for (var i = 0; i < nodes.length; i++) {
    if (nodes[i].nodeType == Node.ELEMENT_NODE) children.push(nodes[i]);
  }
  return children;
}

getChildren(b).length;
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.