2008-11-17 8 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");