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

问题描述:

我是新的ajax。我已经通过jquery完成了正常的xml解析,但无法获得带命名空间的xml。我搜索了网页,我发现的资源非常少。这里是一个在*后,但它不适合我。用jQuery解析xml命名空间。需要帮助!

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> 

等待您的答复。谢谢!

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

嗨,什么是http://aws.example.com/的网址? – Sisir 2011-03-28 19:01:40

+1

这只是一个XML命名空间的示例。我不知道上面粘贴的XML样本的实际名称空间,因为它没有包含在内。 – 2011-03-28 19:52:36

当您使用双反斜线逃避结肠

前可以分析DOM。

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

编辑:

上述解决方案不与WebKit的浏览器。 更好的解决方案

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

没有检查了这一点,虽然。