Solved

Trouble Reading this XML file from javascript

Posted on 2011-09-05
6
375 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
A quick Powershell script I wrote to find old program installations and check versions of a specific file across the network.
Learn the basics of strings in Python: declaration, operations, indices, and slicing. Strings are declared with quotations; for example: s = "string": Strings are immutable.: Strings may be concatenated or multiplied using the addition and multiplic…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…

749 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