C# LINQ选择特定元素
基本上,我很难理解我在这里出了什么问题 基本上,我有以下XML: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
<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子元素。。