使用XMLHttpRequest读取XML数据

4
我试图读取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>

1
你在哪个浏览器中遇到了错误?placeMarks 定义在哪里? - Tim Down
哇,没有什么比删除评论更让人不爽的了。尤其是我发表的那个要求更多细节的评论。我喜欢人们编辑但不注意细节。 - epascarello
1
让我们再做一次。使用哪个浏览器?完整的错误信息是什么?行号是多少? - epascarello
1
你说“我得到了这个错误:参数数量无效”,却表示你没有收到错误。听起来像是你收到了一个错误 :) - epascarello
大家好,有人能指导我如何在服务器上读取“employee.XML”文件吗? - Basimalla Sebastin
你不应该在xmlhttp.open的第三个(异步)参数中使用false。这样会让用户讨厌你。相反,应该使用xmlhttp.onload = function() { ... }; - Klaus
2个回答

11

首先按照下面所示的方式分支您的代码,以查看服务器是否响应了正确的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
Philar: 你怎么循环使用 xmlhttp.open("GET" - Nick Kahn
芝加哥地区,我认为你犯的错误是xml标签应该是<emp id="1007">而不是<empid="1007">。因此,在解析时应该是xmlDoc.getElementsByTagName("emp") - Philar
2
在进行此更改后,如果您需要属性id的值,则应使用xmlDoc.getElementsByTagName("emp")[0].attributes.getNamedItem("id").nodeValue - Philar
1
谢谢Philar:但是我该如何循环遍历XML文件?我会更新XML文件,让您了解我在说什么。 - Nick Kahn
我刚刚更新了 xml 文件,现在想做的是循环遍历该文件并获取其中的数值。 - Nick Kahn

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接