最近需要用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) 来进行判断。请问该怎么判断是否加载成功?
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) 来进行判断。请问该怎么判断是否加载成功?
return xmlDom;
加载成功会返回true,加载失败会返回false。
在xmlDom.load(xml)中即使加载一个不存在的xml文件,
xmlDom都是返回一个object对象,用if (xmlDom) 来判断总是返回true的。
不行的,我用
var ments = xmlDoc.documentElement;ments也是返回一个对象object,用if (ments) 也总是返回true
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load('test.xml');
if(xmlDoc.documentElement==null){
alert("空");
}
不好意思,可能我记错或者写错了documentElement,现在在IE6中可以了。
但是在FF中就不行了。
<html>
<script>function loadxml()
{
xmlDoc.async=false;
xmlDoc.load('test.xml');}
</script>……
<script>
loadxml()
</script>
</html>在FF中,如果test.xml文件不存在,就相当于中途退出了JS程序, 你后续有什么补救处理都没有用的。
今天测试了之后,发现上述应该这样理解:
if (xmlDom.load(xml)||xmlDom.loadXML(xml))这样来判断加载是否成功,而网上很多例子是用返回的xmlDom来判断,即if(xmlDom),这样是不行的,因为xmlDom是一个对象,是不能用来判断true or false 的。
很奇怪,网上很多代码都是这样写的,可能他们都是加载成功,从来没有加载失败过,所以不会出错。
alert('dd');如果加载失败,下面的alert('dd');就不会运行,直接跳出程序,后续所有的处理也不会运行。
你如何创建对象的.
ff中不能用ActiveXObject
在FF中,我是这样创建对象的,
xmlDoc = document.implementation.createDocument("", "", null); 如果我加载的XML文件是存在且正常的,在FF中可以加载成功,alert('dd')也会运行的。而我加载的是一个不存在的XML文件,FF在运行load()之后就直接跳出了,无法后续处理。
{}另外,你在浏览器里输入test.xml看能否加载,检查xml 本身是否合法正确
我现在在IE浏览器是用这种方式判断的,但是在FF中,就无法进行了,会跳出JS程序,下边的代码都不会运行的。