2011-03-28 95 views
1

我是新的ajax。我已經通過jquery完成了正常的xml解析,但無法獲得帶命名空間的xml。我搜索了網頁,我發現的資源非常少。這裏是一個在stackoverflow後,但它不適合我。用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> 

等待您的答覆。謝謝!

回答

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'); 
+0

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

+1

這只是一個XML命名空間的示例。我不知道上面粘貼的XML樣本的實際名稱空間,因爲它沒有包含在內。 – 2011-03-28 19:52:36

0

當您使用雙反斜線逃避結腸

前可以分析DOM。

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

編輯:

上述解決方案不與WebKit的瀏覽器。 更好的解決方案

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

沒有檢查了這一點,雖然。