我有一个包含类似内容的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/PSIA/Streaming/Channels/F36AFF8A-79A0-4C80-BED7-4EF795B4EDB0
</a:directUrl>
</Source>
</StreamingChannel>
</StreamingChannelList>
我需要获取一个:directUrl标签的内容,我写了下面的javascript但无法获取标签content.can任何人告诉我代码中有什么问题(特别是最后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>
答案 0 :(得分:0)
Safari的前缀元素名称a:directUrl
存在问题。
您需要的是getElementsByTagName
的特殊前缀版本,即getElementsByTagNameNS
,它具有名称空间URI的第一个参数。
见https://developer.mozilla.org/en-US/docs/Web/API/element.getElementsByTagNameNS
所以电话必须是
var directUrl = Source[0].getElementsByTagNameNS("http://schemas.datacontract.org/2004/07", "directUrl");
然后它起作用,至少在Safari和Firefox中
现在的问题是我无法在IE中进行测试,因为IE拒绝执行HTTP请求,但有传言称IE不知道getElementsByTagNameNS
。因此,你需要像
var directUrl;
if (document.getElementsByTagNameNS)
directUrl = Source[0].getElementsByTagNameNS("http://schemas.datacontract.org/2004/07", "directUrl");
else
directUrl = Source[0].getElementsByTagName("a:directUrl");
不确定这是否会奏效;这可能需要一些工作。就像我说的,我不能让IE在这里工作。