使用jQuery解析xml命名空间。需要帮助!

时间:2011-03-28 18:31:16

标签: javascript xml jquery namespaces

我是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>

等待你的回复。谢谢!

2 个答案:

答案 0 :(得分:6)

如果可能的话,我建议使用真正的名称空间感知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');

答案 1 :(得分:0)

使用双反斜杠转义冒号

时,可以解析DOM

离。

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

编辑:

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

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

虽然没有检查出来。