1

我有一个 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>

我需要获取 a: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>
4

1 回答 1

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 在这里工作。

于 2013-09-29T20:35:50.710 回答