【问题标题】:Parsing xml namespace with jQuery. Help needed!使用 jQuery 解析 xml 命名空间。需要帮助!
【发布时间】:2011-07-24 17:17:15
【问题描述】:

我是 ajax 新手。我已经通过 jquery 完成了正常的 xml 解析,但无法使用命名空间工作的 xml。我在网上搜索过,我发现的资源很少。这是stackoverflow中的一篇文章,但它对我不起作用。

jQuery XML parsing with namespaces

这里是xml文件的一部分。假设我需要 xml 数据中的年份编号。我将如何获得它?

<aws:sunset>
                <aws:year number="2011" />
                <aws:month number="3" text="March" abbrv="Mar" />
                <aws:day number="27" text="Sunday" abbrv="Sun" />
                <aws:hour number="7" hour-24="19" />
                <aws:minute number="10" />
                <aws:second number="28" />
                <aws:am-pm abbrv="PM" />
                <aws:time-zone offset="-5" text="Central Daylight Time (USA)" abbrv="CDT" />
    </aws:sunset>

等待您的回复。谢谢!

【问题讨论】:

    标签: javascript xml jquery namespaces


    【解决方案1】:

    如果可能的话,我建议使用真正的命名空间感知 XML 解析器,尤其是在处理外部服务时。例如,不能保证命名空间前缀会随着时间的推移保持不变。

    大多数 JavaScript DOM 解析器都会包含 getElementsByTagNameNS(),它可以让您找到具有实际命名空间的元素。

    假设您的数据在xml_file 中,该过程可能看起来像这样。

    var namespace = 'http://aws.example.com/';
    var parser = new DOMParser(); // Webkit, IE has its own
    var xml = parser.parseFromString(xml_file, "text/xml");    
    var year = xml.getElementsByTagNameNS(namespace, 'year')[0]; // returns the first aws:year element
    var year_value = year.getAttribute('number');
    

    【讨论】:

    • 这只是一个示例 XML 命名空间。我不知道您在上面粘贴的 XML 示例的实际命名空间,因为它没有包含在内。
    【解决方案2】:

    使用双反斜杠转义冒号时可以解析DOM

    例如

    $("aws\\:year").attr('number')
    

    编辑:

    上述解决方案不适用于 webkit 浏览器。 更好的解决方案

    $("[nodeName=aws:year]").attr('number')
    

    虽然没有检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      相关资源
      最近更新 更多