C# linq to xml—获取具有特定属性的节点的childrem
我有以下XML结构:C# linq to xml—获取具有特定属性的节点的childrem,c#,linq,linq-to-xml,C#,Linq,Linq To Xml,我有以下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&l
<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>
有什么问题吗?目前,您只需在相关的合作伙伴元素中选择文本,最终会得到一系列结果 我想你想要:
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(…)
只能找到根元素,而您希望从根元素中进行搜索。当前,您只需在相关的合作伙伴元素中选择文本,最终将得到一系列结果
我想你想要:
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(…)
只能找到根元素,而您希望从根元素进行搜索。hmmm-这是一个空序列,即使我将查询简化为以下内容:var query=xdoc.Elements(“partner”)。其中(x=>(string)x.Attribute(“Id”)==rpId.ToString()@ChrisCa:那么这就意味着没有合适的合作伙伴元素。有很多潜在的原因,但我不能从这里检查任何一个。首先要检查的是,您是否得到了合作伙伴
元素。删除Where
子句,看看会发生什么。接下来,检查Id
属性和rpId
本身……事实上,即使它是空的:var query=xdoc.Elements(“partner”)@ChrisCa:这表明xdoc
是根节点的XDocument
而不是XElement
,因此您可能需要xdoc.root.Elements(“合作伙伴”)
。(如果您首先提供了一个简短但完整的程序,那么就更简单了。)您是对的,xdoc是一个Xdocument(因此变量名)。但是一个更完整的代码片段可能会有所帮助,对于SurehMM来说——它是一个空序列,即使我将查询简化为以下内容:var query=xdoc.Elements(“partner”)。其中(x=>(string)x.Attribute(“Id”)==rpId.ToString())@ChrisCa:这表明没有合适的partner
元素。有很多潜在的原因,但我不能从这里检查任何一个。首先要检查的是,您是否得到了合作伙伴
元素。删除Where
子句,看看会发生什么。接下来,检查Id
属性和rpId
本身……事实上,即使它是空的:var query=xdoc.Elements(“partner”)@ChrisCa:这表明xdoc
是根节点的XDocument
而不是XElement
,因此您可能需要xdoc.root.Elements(“合作伙伴”)
。(如果您首先提供了一个简短但完整的程序,那么就更简单了。)您是对的,xdoc是一个Xdocument(因此变量名)。但更完整的代码片段肯定会有所帮助