我在命名空间中有以下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而不管命名空间。 我怎样才能实现这一目标? 这对我来说并不紧急,任何指示都会感激不尽。
答案 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");