Linq to XML -获取具有特定属性的节点的子节点

本文关键字:属性 节点 子节点 XML to 获取 Linq | 更新日期: 2023-09-27 18:10:38

我有以下XML结构:

<partners>
  <partner partner="xxxxxx" Id="12345">
    <email>aa@aa.com</email>
    <email>bb@bb.com</email>
  </partner>
  <partner partner="yyyyyyy" Id="32165">
    <email>aa@aa.com</email>
    <email>bb@bb.com</email>
  </partner>
</partners>

我试图从ID中获取某个合作伙伴的所有电子邮件地址,但无法完全获得。

我已经试过了:

var x = from a in xdoc.Elements("partner") where a.Attribute("Id").Value == rpId.ToString() select a.Value;

有什么问题吗?

Linq to XML -获取具有特定属性的节点的子节点

目前您只是选择相关合作伙伴元素中的文本-并且您将最终获得序列结果。

我想你要:

var query = xdoc.Root.Elements("partner")
                .Single(x => (string) x.Attribute("Id") == rpId.ToString())
                .Elements("email")
                .Select(x => x.Value);

如果没有给定ID的元素,或者有多个元素,该操作将失败。如果您只想查找所有匹配元素中的所有电子邮件地址,您可以使用:

var query = xdoc.Root.Elements("partner")
                .Where(x => (string) x.Attribute("Id") == rpId.ToString())
                .Elements("email")
                .Select(x => x.Value);

编辑:我把xdoc.Elements改成了xdoc.Root.Elements。我怀疑你有:

XDocument xdoc = XDocument.Load(...);

这意味着xdoc.Elements(...)只能找到根元素-而您想从根元素中搜索