Solved

Trouble Reading this XML file from javascript

Posted on 2011-09-05
6
374 Views
Last Modified: 2012-08-13
I have the following XML file...
<?xml version="1.0" encoding="UTF-8" ?>
<company>
  <employee id="001" sex="M" age="19" name="A"></employee>
  <employee id="002" sex="M" age="24" name="B"></employee>
  <employee id="003" sex="M" age="21" name="C"></employee>
</company>

Above file name is "employee.xml" on the server.
All I want is
1. To find how many employee elements we have
2. To number of employee elements, loop it and pick up each ones id', sex, age, name and display (for now an alert message is fine)

I want to write a piece of AJAX to do this.
So I wrote.,...

<script type="text/javascript">
        var xmlDoc;
        function loadXML() {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = false;
            xmlDoc.onreadystatechange = readXML;
            xmlDoc.load("employees.xml");
        }

        function readXML() {
            if (xmlDoc.readyState == 4) {
                //Using documentElement Properties
                //Output company
                alert("XML Root Tag Name: " + xmlDoc.documentElement.tagName);
                alert("Num Nodes: " + xmlDoc.childNodes(0).valuOf);
                alert("Num Nodes: " + xmlDoc.childNodes(1).hasChildNodes());
                alert("Num Nodes: " + xmlDoc.childNodes(2).hasChildNodes());
               
            }
        }
</script>

I do not get the answers I expect. Can some one help?
0
Comment
Question by:prain
  • 2
  • 2
  • 2
6 Comments
 
LVL 22

Expert Comment

by:plusone3055
ID: 36484709
function readXML() {
            if (xmlDoc.readyState == 3
0
 
LVL 22

Expert Comment

by:plusone3055
ID: 36484713
change to

 function readXML() {
            if (xmlDoc.readyState == 3) {
                //Using documentElement Properties
                //Output company
                alert("XML Root Tag Name: " + xmlDoc.documentElement.tagName);
                alert("Num Nodes: " + xmlDoc.childNodes(0).valuOf);
                alert("Num Nodes: " + xmlDoc.childNodes(1).hasChildNodes());
                alert("Num Nodes: " + xmlDoc.childNodes(2).hasChildNodes());
               
            }
        }
</script>

 
0
 

Author Comment

by:prain
ID: 36484814
Gets a runtime error when changed to
if (xmlDoc.readyState == 3) {
  ....
}

Well when
if (xmlDoc.readyState == 4) {
//This line works and gives me "company" as the answer
alert("XML Root Tag Name: " + xmlDoc.documentElement.tagName);
}

My problem is
1. How to get the # of "employee" elements
2. Then how to loop thru that number of elements and pick each elelment's "id", "sex", "age" and "name" components?
0
Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

 
LVL 75

Expert Comment

by:Michel Plungjan
ID: 36484887
Plusone - in what universe is readystate 3 useful?

LOADING (1)
The load is in progress. Reading persisted properties, but not yet parsing data. For readyState definitions, data should be considered equivalent to binary large object (BLOB) properties.

LOADED (2)
Reading of the persisted properties completed. Reading and parsing data, but the object model is not yet available.

INTERACTIVE (3)      
Some data has been read and parsed, and the object model is now available on the partially retrieved data set. Although the object model is available during this state, it is read-only.

COMPLETED (4)      
The document has been completely loaded, successfully or unsuccessfully.
0
 
LVL 75

Accepted Solution

by:
Michel Plungjan earned 250 total points
ID: 36484900
Assuming

<?xml version="1.0" encoding="UTF-8" ?>
<company>
  <employee id="001" sex="M" age="19" name="A"></employee>
  <employee id="002" sex="M" age="24" name="B"></employee>
  <employee id="003" sex="M" age="21" name="C"></employee>
</company>

you have

var emps = xmldoc.getElementsByTagName('employee');
var numberOfEmps = emps.length;
var gender,age,name;
for (var i=0;i<numberOfEmps;i++) {
    name=emps[i].getAttribute("name");
    gender=emps[i].getAttribute("sex");
    age=emps[i].getAttribute("age");
    alert(name +' aged '+age+' is '+gender)
}

Open in new window

0
 

Author Closing Comment

by:prain
ID: 36486206
Thank You. Works Great!
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Question about traversing a tree using jQuery 7 34
multiple selects 23 49
Javascript 2 24
JS Event Does not Trigger From File 2 28
I found this questions asking how to do this in many different forums, so I will describe here how to implement a solution using PHP and AJAX. The logical flow for the problem should be: Write an event handler for the first drop down box to get …
Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
Learn the basics of while and for loops in Python.  while loops are used for testing while, or until, a condition is met: The structure of a while loop is as follows:     while <condition>:         do something         repeate: The break statement m…
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question