无法使用javascript获取xml文件中的标记的内容
我有一个xml文件channels.xml,其中包含如下内容无法使用javascript获取xml文件中的标记的内容,javascript,html,xml,Javascript,Html,Xml,我有一个xml文件channels.xml,其中包含如下内容 <StreamingChannelList xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <StreamingChannel> <Source xmlns:a="http://schemas.datacontract.org/2004/07"> <a:directUrl> rtsp://10.232.15.90/PSI
<StreamingChannelList xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<StreamingChannel>
<Source xmlns:a="http://schemas.datacontract.org/2004/07">
<a:directUrl>
rtsp://10.232.15.90/PSIA/Streaming/Channels/F36AFF8A-79A0-4C80-BED7-4EF795B4EDB0
</a:directUrl>
</Source>
</StreamingChannel>
</StreamingChannelList>
我需要获取:directUrl标记的内容,我编写了以下javascript,但无法获取标记内容。有人能告诉我最后4行代码中的错误吗?
仅供参考:在windows上使用Safari浏览器
<script>
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","channels.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
var StreamingChannel=xmlDoc.getElementsByTagName("StreamingChannel");
var Source=StreamingChannel[0].getElementsByTagName("Source");
var directUrl=Source[0].getElementsByTagName("a:directUrl");
document.write("<td>"+directUrl[0].childNodes[0].nodeValue+"</td>");
</script>
Safari在前缀元素名a:directUrl上有问题 您需要的是getElementsByTagName的特殊前缀版本,即getElementsByTagnames,它的第一个参数是名称空间的URI。 看 所以这个电话必须是
var directUrl = Source[0].getElementsByTagNameNS("http://schemas.datacontract.org/2004/07", "directUrl");
然后它就开始工作了,至少在Safari和Firefox中是这样。
现在的问题是,我无法在IE中进行测试,因为IE拒绝执行HTTP请求,但谣传IE不知道GetElementsByTagnames。因此,您将需要类似
var directUrl;
if (document.getElementsByTagNameNS)
directUrl = Source[0].getElementsByTagNameNS("http://schemas.datacontract.org/2004/07", "directUrl");
else
directUrl = Source[0].getElementsByTagName("a:directUrl");
但不确定这是否有效;这可能需要一些工作。正如我所说,我无法让IE在这里工作。在Firefox中似乎工作正常。更改了对var directUrl=Source[0]的调用;更改对var directUrl=Source[0]的调用后。GetElementsByTagnameshttp://schemas.datacontract.org/2004/07,directUrl;,我能够得到标签内容。感谢@Mr Listeri发现使用标记的绝对位置可以获取a:directUrl内容。directUrl=StreamingChannel[i]。getElementsByTagNameSource[0]。childNodes[0]。childNodes[0]。nodeValue;