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