Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用javascript获取xml文件中的标记的内容_Javascript_Html_Xml - Fatal编程技术网

无法使用javascript获取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

我有一个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,但无法获取标记内容。有人能告诉我最后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;