【发布时间】:2010-09-22 15:32:25
【问题描述】:
我需要能够从具有特定本地名称但具有任何命名空间的元素中获取单个特定属性(如果您熟悉 XMPP,您会明白为什么)。除了编写我自己的(枚举器或单选)扩展方法之外,还有什么想法吗?
我有以下,但我一点也不喜欢:
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");
【问题讨论】:
-
XMPP 中的大多数属性不都在 null 命名空间中吗?我们几乎从不添加前缀,它们也不会自动选择它们所在元素的命名空间。
-
@Joe,我遇到的主要问题是“jabber:server”、“jabber:client”等等。
标签: c# xml linq-to-xml xmpp