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;
有什么问题吗?
目前您只是选择相关合作伙伴元素中的文本-并且您将最终获得序列结果。
我想你要:
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(...)
只能找到根元素-而您想从根元素中搜索