在IE8中使用xmlhttp加载XML文件

时间:2011-03-24 15:59:19

标签: javascript internet-explorer-8 xmlhttprequest xmldom

我正在设计一个在线调查,其中一个主要功能是将问题存储在外部的XML文件中,每次都会加载随机问题。虽然我在Firefox中运行的代码很好,但当我尝试在Internet Explorer 8中加载页面时,我收到“Access is denied”错误。我已将问题隔离到以下代码部分:

//Import the XML File
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5*/
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

//Import XML
xmlhttp.open("POST","Personalized Tour/questions.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

特别是,错误似乎是在xmlhttp.open上引发的。我在其他几个网站上查找了类似的问题,他们似乎暗示有某种域错误触发了IE8的安全设置。是这种情况,还是还有更多呢?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在IE上你可以直接在xml doc上使用XPATH,其他浏览器通过创建xpath解析器来实现它

所以,选择所有“主要”元素将是:

xmlDoc.selectNodes("//major")

但是一旦你有了[0]索引选择器,就可以通过以下方式更有效地完成:

xmlDoc.selectSingleNode("//major")

两者的结果完全不同(除了性能增益)

selectNodes将返回节点列表(列表不是dom部分) selectSingleNode将返回第一个节点(不是列表)

然而,您可以使用xpath在一个命令中进行最终选择,如:

xmlDoc.selectSingleNode("//major/*[1]/*[9]/*[0]")

/ * [n]表示法没问题,但如果节点名称是唯一的或两者兼而有之,则可以使用它们

拥有可以根据需要添加.noValue,.text,.textContent,.nodeName的节点