0

我有以下 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;

有什么想法有什么问题吗?

4

1 回答 1

3

目前,您只是在相关合作伙伴元素中选择文本 - 您最终会得到一系列结果。

我想你想要:

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.Elementsxdoc.Root.Elements发表评论;我怀疑你有:

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

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

于 2013-04-23T18:02:30.887 回答