0

我有以下带有命名空间的 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而不考虑名称空间。我怎样才能做到这一点?这对我来说有点紧急,任何指点将不胜感激。

4

1 回答 1

0

使用命名空间,您需要使用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");
于 2013-02-27T13:36:47.093 回答