【问题标题】:LINQ: Get attribute with any namespace but specific nameLINQ:获取具有任何名称空间但特定名称的属性
【发布时间】: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


【解决方案1】:

如果你不喜欢这个语法,你可以用这个;

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

【讨论】:

  • 顺便说一下,为了完整起见,它应该是 a=>a.Name.LocalName == "from"。
  • +1。查询表达式在做复杂的事情时很好,但是当只有一两个操作时,“点表示法”确实更简单。
猜你喜欢
  • 2018-09-24
  • 1970-01-01
  • 2018-04-13
  • 2013-01-18
  • 2012-06-14
  • 1970-01-01
  • 2021-12-16
  • 2023-02-25
  • 1970-01-01
相关资源
最近更新 更多