Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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选择特定元素_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

C# LINQ选择特定元素

C# LINQ选择特定元素,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,基本上,我很难理解我在这里出了什么问题 基本上,我有以下XML: <Directory> <CustDirectory name="Name1"> <Person name="Foo" /> <Person name="Goo" /> <Person name="Gentu" /> </CustDirectory> <CustDirectory name="Name2"> <P

基本上,我很难理解我在这里出了什么问题

基本上,我有以下XML:

<Directory>
  <CustDirectory name="Name1">
  <Person name="Foo" />
  <Person name="Goo" />
  <Person name="Gentu" />
  </CustDirectory>

  <CustDirectory name="Name2">
  <Person name="F22" />
  <Person name="Gentu" />
  </CustDirectory>
</Directory>
这不起作用,并引发空异常。。。当我去掉
.Where
子句时,子代中包含的数据正确显示


谁能告诉我在LINQ查询方面哪里出了问题,这样我就可以选择特定根的所有子代了?

如果我正确理解了您的问题,您正在尝试提取属于给定目录的所有Person元素。在这种情况下,您应该使用类似于:

var con = e.Element("Directory").Descendants("CustDirectory").Where(p => p.Attribute("name").Value == "Name2").Elements("Person");

如果我正确理解了您的问题,那么您正在尝试提取属于给定目录的所有Person元素。在这种情况下,您应该使用类似于:

var con = e.Element("Directory").Descendants("CustDirectory").Where(p => p.Attribute("name").Value == "Name2").Elements("Person");

除了
ToStr
部分外,其他一切看起来都正常

要仅选择名为
Name2
cust目录下的
Person
元素,您需要将
置于
位置,如下所示:

var con = e.Element("Directory").Elements("CustDirectory")
    .First(cd => cd.Attribute("name").Value == "Name2").Descendants("Person");

注意,我将
元素(“CustDirectory”)
更改为
元素(“CustDirectory”)

除了
ToStr
部分外,其他一切看起来都正常

要仅选择名为
Name2
cust目录下的
Person
元素,您需要将
置于
位置,如下所示:

var con = e.Element("Directory").Elements("CustDirectory")
    .First(cd => cd.Attribute("name").Value == "Name2").Descendants("Person");

注意,我将
元素(“CustDirectory”)
更改为
元素(“CustDirectory”)

开始时不需要
元素(“目录”)
,因为
e
它本身已经被引用了
(不同的情况是
e
XDocument
而不是您在评论中所说的
XElement
)。此示例能够返回
节点,给出了有问题的示例XML:

var e = XElement.Parse("...");
var con = e.Elements("CustDirectory")
           .Where(p => p.Attribute("name").Value == "Name2")
           .Elements("Person");

开始时不需要
元素(“目录”)
,因为
e
它本身已经被引用了
(如果
e
XDocument
而不是您在评论中所说的
XElement
,则情况不同)。此示例能够返回
节点,给出了有问题的示例XML:

var e = XElement.Parse("...");
var con = e.Elements("CustDirectory")
           .Where(p => p.Attribute("name").Value == "Name2")
           .Elements("Person");
void Main()
{
var xml=@”
";
var xmlDoc=XDocument.Parse(xml);
var con=xmlDoc.Element(“目录”)
.Elements(“目录”)
.Where(p=>p.Attribute(“name”).Value==“Name2”)
.后代(“人”)
//增加了获得特定节点的奖励
其中(p=>p.Attribute(“name”).Value==“F22”);
控制台写入线(con);
}
void Main()
{
var xml=@”
";
var xmlDoc=XDocument.Parse(xml);
var con=xmlDoc.Element(“目录”)
.Elements(“目录”)
.Where(p=>p.Attribute(“name”).Value==“Name2”)
.后代(“人”)
//增加了获得特定节点的奖励
其中(p=>p.Attribute(“name”).Value==“F22”);
控制台写入线(con);
}

什么是
e
指的是什么?什么是
ToStr
XAttribute.Value
已经是一个字符串。@Selman22抱歉,
e
指的是在XML中解析的
XElement e
,如果这是XML,它应该返回0个元素,因为您正在查找不存在的名称。例如,如果您将“Name2”替换为“Foo”,它将起作用。值为Name2的属性是否不在元素目录中?您似乎正在搜索person子元素。
e
指的是什么?什么是
ToStr
XAttribute.Value
已经是一个字符串。@Selman22抱歉,
e
指的是在XML中解析的
XElement e
,如果这是XML,它应该返回0个元素,因为您正在查找不存在的名称。例如,如果您将“Name2”替换为“Foo”,它将起作用。值为Name2的属性是否不在元素目录中?您似乎正在搜索person子元素。。