Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# linq to xml—获取具有特定属性的节点的childrem_C#_Linq_Linq To Xml - Fatal编程技术网

C# linq to xml—获取具有特定属性的节点的childrem

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

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

有什么问题吗?

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

我想你想要:

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(因此变量名)。但更完整的代码片段肯定会有所帮助