在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");
@ Ian ..感谢您的回复。但getElementsByTagNameNS在IE 8中不起作用。有没有什么办法可以在IE,FF和Chrome等所有浏览器中运行代码... – later2013 2013-03-04 06:38:13
@ later2013我已经做了一些更多的挖掘,并用另一个建议编辑了我的答案。 – 2013-03-04 08:16:26