无法使用javascript获取xml文件中的标记内容

时间:2013-09-29 08:13:08

标签: 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/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>

1 个答案:

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