在IE,FF和chrome中读取带名称空间的xml

问题描述:

我对命名空间有下面的xml响应。在IE,FF和chrome中读取带名称空间的xml

<?xml version="1.0"?> 
<response status="200"> 
    <ns3:op xmlns="http://xxx.com/details/" 
       xmlns:ns2="http://xxx.com/mgmt/" 
       xmlns:ns3="http://xxx.com/list/"> 
    <ns2:ntfs count="140"> 
     <ns2:ntf> 
     <ns2:Nid>4687807</ns2:Nid> 
     </ns2:ntf> 
    </ns2:ntfs> 
    </ns3:op> 
</response> 

我需要解析这个并获得每行的Nid值。我尝试使用getElementsByTagName(ns3:op),但它不适用于safari。 也尝试使用 xmlDoc.documentElement.selectNodes(“/ response/op/ntfs”); 但它不适用于FF。 有没有什么办法可以读取独立于名称空间和浏览器的响应。

嗨,

我的XML输出可能会发生变化,元素可以有也可能没有命名空间前缀。 所以我需要解析xml而不考虑命名空间。 我怎样才能做到这一点? 这对我来说不是什么紧急事情,任何指针都会感激不尽。

你需要使用getElementsByTagNameNS与命名空间URI

document.getElementsByTagNameNS('http://xxx.com/list/', 'op') 

然而,这显然并不在IE浏览器早于9,通常推荐的跨浏览器解决方案Sarissa,它实现了一个JavaScript库的命名空间XPath方法可以在更多浏览器上运行:

var xmlDoc = new DOMParser().parseFromString(....); 
xmlDoc.setProperty("SelectionNamespaces", 'xmlns:ns3="http://xxx.com/list/"'); 
xmlDoc.setProperty("SelectionLanguage", "XPath"); 
var op = xmlDoc.selectSingleNode("/response/ns3:op"); 
+0

@ Ian ..感谢您的回复。但getElementsByTagNameNS在IE 8中不起作用。有没有什么办法可以在IE,FF和Chrome等所有浏览器中运行代码... – later2013 2013-03-04 06:38:13

+0

@ later2013我已经做了一些更多的挖掘,并用另一个建议编辑了我的答案。 – 2013-03-04 08:16:26