使用XMLHttpRequest,读取XML数据

时间:2010-11-30 16:52:32

标签: javascript xml xmlhttprequest

我正在尝试读取xml文件但不知何故我收到此错误:参数数量无效。

<script type="text/javascript"> 
//<![CDATA[ 
    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", "employee.XML", false); 
    xmlhttp.send(); 
    xmlDoc = xmlhttp.responseXML; 

    var empid= xmlDoc.getElementsByTagName("empid"); 
    var total = placeMarks.length; 
    var names = xmlDoc.getElementsByTagName("Name"); 
    var designation= xmlDoc.getElementsByTagName("designation"); 
    var phone= xmlDoc.getElementsByTagName("phone"); 
    ..... 
</script> 

XML数据:

<employee>
<emp id="1007">
<name>John Chamber</name>
<designation>Web Expert1</designation>
<phone>555-55-555</phone>
<name>John D</name>
<designation>Web123123</designation>
<phone>555-55-555</phone>
<name>Chamber</name>
<designation>Web Expert</designation>
<phone>555-55-555</phone>
<name>Thomas</name>
<designation>TESTTEST</designation>
<phone>555-55-555</phone>

</emp>
</employee>

2 个答案:

答案 0 :(得分:10)

首先按如下所示展开您的代码,看看服务器是否正在使用正确的200响应进行响应。

            xmlhttp.open("GET", "employee.XML", false); 
            xmlhttp.send(null);
         if (xmlhttp.status==200) {

                      xmlDoc = xmlhttp.responseXML; 
                     var empid= xmlDoc.getElementsByTagName("emp"); 
                     var total = placeMarks.length; 
                     var names = xmlDoc.getElementsByTagName("Name"); 
                     var designation= xmlDoc.getElementsByTagName("designation"); 
                     var phone= xmlDoc.getElementsByTagName("phone"); 
                     ..... ;
          }

                else if (xmlhttp.status==404) {
          alert("XML could not be found");
         }

另外我的建议是使用像jQuery这样的javascript库来完成你的繁重任务。创建XHR对象的整个代码只需简化为一行

$.get(url,function(data){
                     xmlDoc = data; 
                     var empid= xmlDoc.getElementsByTagName("emp"); 
                     var total = placeMarks.length; 
                     var names = xmlDoc.getElementsByTagName("Name"); 
                     var designation= xmlDoc.getElementsByTagName("designation"); 
                     var phone= xmlDoc.getElementsByTagName("phone");
});

最后,您使用的任何现代浏览器都应该能够轻松指出脚本中的哪一行引发错误。如果您仍然遇到问题,请确认哪一行引发了错误。

修改 问题范围已经改变。 OP现在想要循环遍历xml。 首先,需要设计xml以满足要求。因此它应该看起来像这样

<employees>
 <emp id="006">
   <name>John Chamber</name>
   <designation>Web Expert1</designation>
   <phone>555-55-555</phone>
 </emp>
 <emp id="007"> 
  <name>John D</name>
  <designation>Web123123</designation>
  <phone>555-55-555</phone>
 </emp>
 <emp id="008"> 
  <name>Chamber</name>
  <designation>Web Expert</designation>
  <phone>555-55-555</phone>
 </emp>
 <emp id="009">
   <name>Thomas</name>
   <designation>TESTTEST</designation>
   <phone>555-55-555</phone>
 </emp>
</employees>

现在用于解析xml的javascript

var emp=xmlDoc.getElementsByTagName("emp");
for (i=0;i<emp.length;i++) {
   var names=emp[i].childNodes[0].text;
   var designation= emp[i].childNodes[1].text;
   ......
}

答案 1 :(得分:0)