我正在尝试使用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工作得很好......
答案 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");