2008-11-17 90 views
2

我需要能夠從具有特定本地名稱但具有任何名稱空間的元素(如果您熟悉XMPP,您將理解爲什麼)獲取單個特定屬性。除了寫我自己的(枚舉或單選)擴展方法,還有什麼想法?LINQ:使用任何名稱空間,但具體名稱獲取屬性

我有以下的,但我不喜歡它:

 XAttribute from = (from c in elem.Attributes() 
          where c.Name.LocalName == "from" 
          select c).FirstOrDefault<XAttribute>(); 

     XAttribute to = (from c in elem.Attributes() 
         where c.Name.LocalName == "to" 
         select c).FirstOrDefault<XAttribute>(); 

編輯:想是這樣的:

 string val = (string)elem.Attribute("{*}to"); 

解決方案:

 XAttribute from = elem.Attributes() 
      .FirstOrDefault(a => a.Name.LocalName == "from"); 

     XAttribute to = elem.Attributes() 
      .FirstOrDefault(a => a.Name.LocalName == "to"); 
+0

XMPP中的大部分屬性都不在空名稱空間中嗎?我們幾乎沒有前綴,並且它們不會自動選取它們所在元素的名稱空間。 – 2008-11-18 06:05:24

+0

@Joe,我的主要問題是「jabber:server」,「jabber:client」等等。 – 2009-01-15 15:00:55

回答

4

如果你不喜歡的語法,你可以使用這個;

elem.Attributes().FirstOrDefault(a=>a.Name.LocalName == "from");