CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  Ajax

为什么responseXML读不到文件,而responsetext就可以?

楼主everlily()2006-09-29 17:11:46 在 Web 开发 / Ajax 提问

XML   文件(test.xml):  
   
  <?xml   version="1.0"   encoding="UTF-8"?>  
  <root>  
  <data>this   is   a   test</data>  
  </root>  
   
  Javascript文件:  
   
  var   req;  
   
  function   showWindow()  
  {  
        req   =   new   ActiveXObject("Microsoft.Xmlhttp");  
        req.open("GET","earth.xml",true);  
        req.onreadystatechange   =   callback;  
        req.send(null);  
   
  }  
   
  function   callback()  
  {  
      if(req.readyState   ==   4   &&   (req.Status   ==   0     ||   req.Status   ==   200))  
      {  
          var   resp=   req.responseXml;  
          var   data=   resp.getElementsByTagName("data")[0];  
        alert("data   ="   +   data);  
   
      }  
  }  
   
  显示的   data=null;  
   
  但是如果换成req.responseText;   则能显示出完成的xml文件内容。  
   
  为什么用responseXml就得不到正确的值呢?  
   
  问题点数:20、回复次数:33Top

1 楼zoujiaxue(灵魂学校)回复于 2006-09-30 09:00:41 得分 0

var   resp=this.req.responseXML.documentXML;Top

2 楼everlily()回复于 2006-09-30 09:14:17 得分 0

我试过了,还是不行。Top

3 楼eclipse32()回复于 2006-09-30 09:26:16 得分 0

var   xmlDOM=resp.responseXML;  
  var   rootNode=xmlDOM.documentElement;  
  try{  
  var   info   =   rootNode.getElementsByTagName('data');  
  alert("data   ="   +   info[0].firstChild.data);  
  }catch(exception){}Top

4 楼everlily()回复于 2006-09-30 09:43:44 得分 0

还是不行,rootNode=nullTop

5 楼eclipse32()回复于 2006-09-30 11:10:15 得分 0

你调用的是test.xml还是earth.xml?呵呵,怎么会是null?Top

6 楼gsh945(太平洋底)回复于 2006-09-30 11:19:47 得分 0

(req.Status   ==   0     ||   req.Status   ==   200)  
   
  只要   req.Status==200   行不行,你试一下Top

7 楼gsh945(太平洋底)回复于 2006-09-30 11:20:43 得分 0

你调用的是test.xml还是earth.xml?呵呵,怎么会是null?  
   
  是啊,好像调用文件写错了阿  
  Top

8 楼everlily()回复于 2006-09-30 13:08:07 得分 0

文件没调错,我的帖子里写错了。  
   
  因为responseText都能显示出正确的earth.xml文件的内容,但是responseXML就不行。  
   
  我还试过加上setRequestHeader("Content-type","text/xml").也不行。Top

9 楼chaircat(chaircat)回复于 2006-09-30 14:34:02 得分 0

因为你的内容不符合XML标准...  
  XML语法要求很严,只要有一点不符就不行...Top

10 楼zoujiaxue(灵魂学校)回复于 2006-09-30 21:29:24 得分 0

你先测试一下你的.aspx页面是不是能够生成正确的XML文档Top

11 楼medusagjf(郭婉仪)回复于 2006-10-03 12:57:22 得分 0

是存在这个问题,你可以这样来读  
  var   xmlDoc;  
  //得到xml上下文  
  function   getXMLHandler(xmlFile){  
  if(window.ActiveXObject){  
  xmlDoc=new   ActiveXObject("Microsoft.XMLDOM");  
  xmlDoc.async=false;  
  xmlDoc.onreadystatechange   =   function()   {  
  if(xmlDoc.readyState   ==   4)   doAction();  
  }  
  xmlDoc.load(xmlFile);  
  }else   if(document.implementation&&document.implementation.createDocument){  
  xmlDoc=document.implementation.createDocument('','',null);  
  xmlDoc.onload=doAction();  
  xmlDoc.load(xmlFile);  
  }else   return   null;  
  return   xmlDoc;  
  }  
  把xml文件传给这个函数后,就可以用xmlDoc.getElementsByTagName('data');得到节点里得值了Top

12 楼hanpoyangtitan(韩波洋)回复于 2006-10-03 13:14:47 得分 0

楼主的原因:缺少了属性text  
  var   data=resp.getElementsByTagName("data")[0].text;  
  var   data=resp.selectSingNode("//data").text;  
  var   data=resp.selectNodes("data")[0].text;  
  不要忘记是取值,因为还有getAttribute("@id")Top

13 楼shaipe(鹏海轻舟)回复于 2006-10-07 23:22:40 得分 0

应该是你的Xml格式不正确或者没有把Contenttype设为Text/xml的原因吧  
  Top

14 楼everlily()回复于 2006-10-08 16:39:50 得分 0

以上各位说的,我都试过了,都没有用。  
   
  今天做了个测试  
  1、首先aspx页面能正确的处理XML文档  
  2、用responseText能得到XML文档的内容  
  3、XML文档的内容是没有错的,因为我将responseText返回的内容传给loadXml函数,就可以正常的调用getElementsByTagName,并且显示正确的值  
   
   
  我觉得responsexml只所以出错,是因为这个函数根本没有得到xml文件,因为采用load(req.responseXML),提示“文档必须要有一个顶层元素”  
   
  另外,我已经把Contenttype设为text/xml了,也不行  
   
   
  Top

15 楼benlao()回复于 2006-10-08 16:55:06 得分 0

resp.getElementsByTagName('data')[0].firstChild.dataTop

16 楼everlily()回复于 2006-10-08 17:18:03 得分 0

呵呵,如果只是访问单独xml文件,那么repsonseXML是不行的。  
   
  终于搞明白了。Top

17 楼chaircat(chaircat)回复于 2006-10-08 19:27:35 得分 0

有这回事么??  
  做个实验先.....Top

18 楼liufei8463(武汉小兵)回复于 2006-10-09 10:32:27 得分 0

我也读不出来啊   !!正是这个问题啊!跟楼主一样的问题   不解!!Top

19 楼wisdomhxz(星尘缥缈)回复于 2006-10-09 16:04:35 得分 0

var   data=   resp.getElementsByTagName("data")[0].nodeValue;  
   
  后面加个.nodeValue;Top

20 楼Eilien(我要成长,我正在成长,)回复于 2006-10-11 15:03:59 得分 0

mark.Top

21 楼sven(想骑马的牛)回复于 2006-10-18 17:41:07 得分 0

和我碰到的问题一样,  
  我有个index.php的页面,?mode=update时生成一个XML页面(标准的).  
  用和你的方法差不多的JS访问得到NULL值,  
  而直接把生成的的页面保存成一个不带参数访问的页面时就可以,如xml.php.  
   
  我最后也是用resultText,   然后分responseText.split的方法暂时处理了...Top

22 楼chaircat(chaircat)回复于 2006-10-18 19:38:12 得分 0

lz把XML文件贴出来看看??  
  我还是觉得XML文件格式有问题...  
  因为我用MSXML   SDK的示例XML文件直接用loadXml()是打不开的...  
  但是用load()却可以...后面发现原来是XML头部那个声明的问题...  
  后来乱改改到loadXml()可以打开了...load()又打不开了...Top

23 楼xingzhiyun(八宝齐)回复于 2006-10-18 22:37:35 得分 0

这个问题我也有,所以我对结果的处理都是用response.txt来得到xml结果,感觉有些不好,但是在实际使用中,没有问题,但不知道原因是什么.  
  好像以java为后台的时候就没有这样的问题,但以.net为后台的时候就出现这样的问题了.  
  希望高人给解释解释Top

24 楼woshumao0080()回复于 2006-10-19 18:32:10 得分 0

不知道楼主用的是什么浏览器来测试,我现在也正在被这个问题郁闷哪。但是我的代码是在IE6.0中不好用,在fireFox1.5中都能正确显示。Top

25 楼seahi(老七)回复于 2006-10-22 16:57:03 得分 0

我也和楼主遇到同样的问题,不明白是咋回事。Top

26 楼xuzuning(唠叨)回复于 2006-10-23 16:35:12 得分 0

1、确认xml文档是正确的  
  2、如果载入的xml文件,则必须在web方式下测试  
  3、如果载入的是程序生成的xml文档,则程序必须先输出类型声明的头  
  4、由于ie中会缓存接受的数据,调试时要注意清空缓冲区。不然你测试的仍是第一次发生错误时的数据Top

27 楼Eilien(我要成长,我正在成长,)回复于 2006-10-23 18:02:28 得分 0

回复人:everlily()   (   )   信誉:100 2006-10-8   17:18:04 得分:0  
   
   
  ?  
  呵呵,如果只是访问单独xml文件,那么repsonseXML是不行的。  
   
  终于搞明白了。??????  
   
  难道XML文档里只有一个结点的时候,读不出来,还是怎么的,楼主搞定了,说一说你详细的解决思路啊。Top

28 楼pgy8288(Just Coding)回复于 2006-10-24 12:49:58 得分 0

xuzuning(唠叨)   (   )   信誉:739         Blog     2006-10-23   16:35:00     得分:   0      
       
        4、由于ie中会缓存接受的数据,调试时要注意清空缓冲区。不然你测试的仍是第一次发生错误时的数据  
   
  这一条很多时候都会忘记,改来改去都没效果  
  呵呵  
       
     
  Top

29 楼Hozaka(空虚的狼)回复于 2006-10-24 14:58:08 得分 0

var   data   =   resp.getElementsByTagName("data")[0].childNodes[0].nodeValue;  
   
  包你行,呵呵。主要是xml模型的节点比较多,用起来麻烦,还是自己封装一个解析类吧Top

30 楼loworth()回复于 2006-10-24 17:40:04 得分 0

var   data=   resp.getElementsByTagName("data")[0].nodeValue;  
   
  你调用的东西不对   掉了元素节点了   应该调用个文本节点Top

31 楼woshumao0080()回复于 2006-10-25 10:45:16 得分 0

1.IE缓冲区怎么清除阿?  
  2.真没有人碰到过浏览器不兼容的问题么?  
   
  我的代码现在在FireFox下,一切正常,包括XML文件的读取和servlet生成的XML对象,而IE中啥啥都不好使Top

32 楼woshumao0080()回复于 2006-10-25 11:38:24 得分 0

嘿嘿,好了,我的好了,  
  在response中返回xml的时候少了这么一句:  
          out.println("<?xml   version=\"1.0\"   encoding=\"gb2312\"?>");  
  加上就好了。  
  但是为什么要加呢?setContentType做不到么,为什么在fireFox中就不用呢?  
  嗷嗷的诡异阿Top

33 楼cfgm(风色幻想)回复于 2006-10-26 01:12:59 得分 0

不是不能单独的xml!问题只有两种,编码问题和文件类型  
   
   
  mixweb.cn里边都是这样用的Top

相关问题

关键词

得分解答快速导航

  • 帖主:everlily

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo