xmlHttp.responseXML似乎为空 - .responseText已正确填充

时间:2014-04-09 08:18:20

标签: javascript jquery ajax xml xmlhttprequest

我正在尝试使用JavaScript将XML文件读取到对象,以最终解析它以获取信息并转换其中的数据。

XML文件格式正确(并且在同一个域中),我将其粘贴到多个验证器中,并且所有验证器都没有错误地返回,因此这不应该是错误的来源。

我试图通过ajax / xmlHttpRequest访问该文件。以下是相关部分的代码段:

if (xmlHttp)
    {
        var url = xmlFile;
        xmlHttp.open("GET", url, true);
        xmlHttp.onreadystatechange = function() 
        {
            if (xmlHttp.readyState == 4)
            {
                //alert(xmlHttp.responseText);
                var xmlData = xmlHttp.responseXML;
                var txt="";
                var x=xmlData.getElementsByTagName("rs:data");

                alert(x.length);

                for (i=0;i<x.length;i++)
                {
                    txt=txt + x[i].childNodes[0].nodeValue + "<br>";
                }   
            }
        }
        xmlHttp.send();
    }

现在问题是变量“x”总是返回空(长度= 0)。但是当我提醒responseText时,我可以在警告消息中看到整个xml文件,这对我来说似乎很奇怪。

xml文件基本上如下所示:

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
 xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
 xmlns:rs='urn:schemas-microsoft-com:rowset'
 xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:CommandTimeout='30'>
  <s:AttributeType name='ows_Art' rs:name='Art' rs:number='1'>
     <s:datatype dt:type='string' dt:maxLength='512' />
  </s:AttributeType>
</s:ElementType>
</s:Schema>
  <rs:data>
    <z:row [...] />
  </rs:data>
</xml>

我想要的是节点下存储的所有数据以及我可以学习的内容

var x=xmlData.getElementsByTagName("rs:data");

应该做到这一点。我能想到的唯一原因是.responseXML回来是空的,但是,没有确定的方法可以检查,因为如果我提醒(xmlHttp.reponseXML)它只是告诉我,返回一个对象,但不是它...

有没有人知道为什么整件事不起作用?我觉得最令人困惑的是,.responseText工作得很好......

1 个答案:

答案 0 :(得分:1)

rs:data不是标记名称。 data命名空间中的标记名称为urn:schemas-microsoft-com:rowset(由xmlns:rs='urn:schemas-microsoft-com:rowset'指定)。

您应该使用名称空间感知的DOM方法。

var x = xmlData.getElementsByTagNameNS("urn:schemas-microsoft-com:rowset", "data");