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

时间:2013-02-27 13:34:07

标签: xml namespaces

我在命名空间中有以下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( “/响应/ OP / NTFS”); 但它不适用于FF。 有没有什么方法可以读取独立于命名空间和浏览器的响应。

您好,

我的输出xml可能会更改,元素可能有也可能没有名称空间前缀。 所以我需要解析xml而不管命名空间。 我怎样才能实现这一目标? 这对我来说并不紧急,任何指示都会感激不尽。

1 个答案:

答案 0 :(得分:0)

对于名称空间,您需要将getElementsByTagNameNS与名称空间URI

一起使用
document.getElementsByTagNameNS('http://xxx.com/list/', 'op')

然而,这显然在早于9的IE中不起作用。一个通常推荐的跨浏览器解决方案是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");