使用Javascript在IE中加载XML时未检测到根节点

使用Javascript在IE中加载XML时未检测到根节点,javascript,xml,internet-explorer,xmlhttprequest,Javascript,Xml,Internet Explorer,Xmlhttprequest,我试图用Javascript解析XML文件,但在IE7上遇到了问题 如果我有此代码: function LoadXml() { var xmlPath = document.getElementById("hsTreeviewXmlPath").value; var xmlhttp=false; /*@cc_on @*/ /*@if (@_jscript_version >= 5) // JScript gives us Conditional c

我试图用Javascript解析XML文件,但在IE7上遇到了问题

如果我有此代码:

function LoadXml()
{
    var xmlPath = document.getElementById("hsTreeviewXmlPath").value;

    var xmlhttp=false;
    /*@cc_on @*/
    /*@if (@_jscript_version >= 5)
    // JScript gives us Conditional compilation, we can cope with old IE versions.
    // and security blocked creation of the objects.
     try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      alert("here1");
     } catch (e) {
      try {
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
       alert("here2");
      } catch (E) {
       xmlhttp = false;
      }
     }
    @end @*/
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
        try {
            xmlhttp = new XMLHttpRequest();
            alert("here3");
        } catch (e) {
            xmlhttp=false;
        }
    }
    if (!xmlhttp && window.createRequest) {
        try {
            xmlhttp = window.createRequest();
            alert("here4");
        } catch (e) {
            xmlhttp=false;
        }
    }

    xmlhttp.open("GET",xmlPath,false);
    xmlhttp.send(null);

    var xmlDoc = xmlhttp.responseXML;

    ParseXml(xmlDoc);
}

function ParseXml(xmlDoc)
{
    var root = xmlDoc.documentElement;
    alert(root);

    for(i=0; i< root.childNodes.length; i++)
    {
        var node = root.childNodes[i];
        if(node.nodeType ==1) //process element nodes (type 1)
        {
            if(node.childNodes.length > 1)
            {
                CreateChildren("hsTreeview",node);
            }
            else
            {
                AddNode("hsTreeview", node);
            }
        }
    }
}
函数LoadXml()
{
var xmlPath=document.getElementById(“hsTreeviewXmlPath”).value;
var xmlhttp=false;
/*@抄送@*/
/*@如果(@_jscript_version>=5)
//JScript为我们提供了条件编译,我们可以处理旧的IE版本。
//并且安全性阻止了对象的创建。
试一试{
xmlhttp=新的ActiveXObject(“Msxml2.xmlhttp”);
警惕(“此处1”);
}捕获(e){
试一试{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
警惕(“此处2”);
}捕获(E){
xmlhttp=false;
}
}
@结束@*/
如果(!xmlhttp&&typeof XMLHttpRequest!=“未定义”){
试一试{
xmlhttp=新的XMLHttpRequest();
警惕(“此处3”);
}捕获(e){
xmlhttp=false;
}
}
if(!xmlhttp&&window.createRequest){
试一试{
xmlhttp=window.createRequest();
警惕(“此处4”);
}捕获(e){
xmlhttp=false;
}
}
open(“GET”,xmlPath,false);
xmlhttp.send(空);
var xmlDoc=xmlhttp.responseXML;
ParseXml(xmlDoc);
}
函数ParseXml(xmlDoc)
{
var root=xmlDoc.documentElement;
警报(根);
对于(i=0;i1)
{
CreateChildren(“hsTreeview”,节点);
}
其他的
{
AddNode(“hsTreeview”,node);
}
}
}
}
在FF和Chrome中,这是正确的,添加了它应该添加的节点,但在IE7上,我得到了一个脚本错误和特定错误:

所需对象

这给出了与该行相关的行号:

for(i=0; i< root.childNodes.length; i++)
{
for(i=0;i
警报框告诉我,在IE中,从
xmlDoc.documentElement
填充的根节点为空

我已经使用此处的警报1等确认,在IE7中,它正在使用
xmlhttp=new-ActiveXObject(“Msxml2.xmlhttp”);
对象


有没有办法解决这个问题,因为它确实令人沮丧?

请确保XML文件的文本/XML Mime类型正确

编辑以下内容:


还要确保XML文件是通过http服务器从与网页相同的域和端口提供的。IE将防止网页出于安全原因访问其原始域以外的URL或本地计算机上的文件。

如何做到这一点?这只是一个位于Sharepoint目录上的文件。在我的测试案例中(脱离硬盘),它仍然无法工作。@Alastair是否可以在
var xmlPath
中重命名扩展名为.xml的文件,并通过http加载网页?该文件被指定为xml文件,路径以“.xml”结尾。通过http加载的确切含义是什么?@Alastair使用http URL打开网页,而不是从本地文件系统加载网页(我认为您的意思是“脱离HDD”)。还可以尝试通过http URL加载.xml文件。如果该文件被识别为xml,则应在ie中对其进行语法着色。确实,这似乎起了作用。奇怪。您有什么解释吗?现在来了解为什么不显示子元素。