我有以下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;
任何想法有什么不对?
答案 0 :(得分: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.Elements
更改为xdoc.Root.Elements
;我怀疑你有:
XDocument xdoc = XDocument.Load(...);
这意味着xdoc.Elements(...)
只能找到根元素 - 而您想要从根元素中搜索。