最近需要用JS处理XML文件,在网上查了很多资料,很多内容都是雷同的,核心代码就是以下这些:
        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");    
        xmlDoc.async=false;   
        xmlDoc.load('test.xml');   然后很多人都是用以下语句来判断加载XML是否成功:
        if (xmlDoc != null)或者直接: if(xmlDoc)但是我发现xmlDoc即使加载失败,例如我加载一个根本不存在的xml文件,xmlDoc也是返回一个object,也就是说xmlDoc总是返回非空值,而且我发现继续下来的读取节点的语句返回的也是非空值,没有办法判断是否读取正确:
           var items = xmlDoc.getElementsByTagName('item');
这个items返回也是一个object,也不能用 if (items != null) 来进行判断。请问该怎么判断是否加载成功?

解决方案 »

  1.   

     xmlDom.load(xml)||xmlDom.loadXML(xml);
      return xmlDom;
    加载成功会返回true,加载失败会返回false。
      

  2.   

    你可以用xmlDoc.documentElement来判断
      

  3.   

    谢谢楼上的回复,但是不知道您试过没有。
    在xmlDom.load(xml)中即使加载一个不存在的xml文件,
    xmlDom都是返回一个object对象,用if (xmlDom) 来判断总是返回true的。
      

  4.   

    xmlDom好歹是你new出来的一个对象,肯定不能判断它==null了
      

  5.   


    不行的,我用
    var ments = xmlDoc.documentElement;ments也是返回一个对象object,用if (ments) 也总是返回true
      

  6.   

    你用的是什么浏览器呀?我IE6、7测试通过
      var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");   
      xmlDoc.async=false;   
      xmlDoc.load('test.xml');
      if(xmlDoc.documentElement==null){
       alert("空");
      }
      

  7.   


    不好意思,可能我记错或者写错了documentElement,现在在IE6中可以了。
    但是在FF中就不行了。
      

  8.   

    我发现在FF中,如果加载一个不存在的xml文件,整个js就会中断执行,包括调用它的程序。如:
    <html>
     <script>function loadxml()
    {
       xmlDoc.async=false; 
       xmlDoc.load('test.xml');}
     </script>……
      <script>
         loadxml()
      </script>
    </html>在FF中,如果test.xml文件不存在,就相当于中途退出了JS程序, 你后续有什么补救处理都没有用的。
      

  9.   

    上述代码是简化了的,加载XML我是分开IE与FF处理的,如果加载的XML文件是存在而且正常的,在FF中式正常处理的。 
      

  10.   

    关于“加载成功会返回true,加载失败会返回false。”
    今天测试了之后,发现上述应该这样理解:
    if (xmlDom.load(xml)||xmlDom.loadXML(xml))这样来判断加载是否成功,而网上很多例子是用返回的xmlDom来判断,即if(xmlDom),这样是不行的,因为xmlDom是一个对象,是不能用来判断true or false 的。
    很奇怪,网上很多代码都是这样写的,可能他们都是加载成功,从来没有加载失败过,所以不会出错。
      

  11.   

    同样的代码在FireFox中就不能进行,如:xmlDoc.load('test.xml');
    alert('dd');如果加载失败,下面的alert('dd');就不会运行,直接跳出程序,后续所有的处理也不会运行。
      

  12.   


    你如何创建对象的.
    ff中不能用ActiveXObject
      

  13.   


    在FF中,我是这样创建对象的,
     xmlDoc = document.implementation.createDocument("", "", null); 如果我加载的XML文件是存在且正常的,在FF中可以加载成功,alert('dd')也会运行的。而我加载的是一个不存在的XML文件,FF在运行load()之后就直接跳出了,无法后续处理。  
      

  14.   

    if(xmlDoc.load('test.xml'))
    {}另外,你在浏览器里输入test.xml看能否加载,检查xml 本身是否合法正确
      

  15.   


    我现在在IE浏览器是用这种方式判断的,但是在FF中,就无法进行了,会跳出JS程序,下边的代码都不会运行的。