【问题标题】:Read xml with namespace in IE, FF and chrome在 IE、FF 和 chrome 中读取带有命名空间的 xml
【发布时间】:2013-02-27 13:34:06
【问题描述】:

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

【问题讨论】:

    标签: xml namespaces


    【解决方案1】:

    对于命名空间,您需要将 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 我做了更多的挖掘工作并用另一个建议编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多