【发布时间】:2014-07-31 14:41:57
【问题描述】:
基本上,我很难理解我在哪里出错了..
基本上,我有以下 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>
使用表单,我正在更新联系人列表,我想根据类别(存储为字符串)将列表写入 XML。
因此,我决定使用 LINQ 来执行此操作,但是,我似乎无法弄清楚 .Where 并阅读了有关 stackoverflow 的问题,但似乎无法弄清楚。
这是我的尝试:
var con = e.Element("Directory").Element("CustDirectory").Descendants("Person").Where(p => p.Attribute("name").Value.ToStr == "Name2");
这不起作用并引发空异常...当我取消.Where 子句时,后代中包含的数据正确显示。
谁能告诉我在 LINQ 查询方面哪里出了问题,以便我可以选择特定根的所有后代?
【问题讨论】:
-
e指的是什么? -
ToStr是什么?XAttribute.Value已经是一个字符串了。 -
@Selman22 对不起,
e指的是XElement e用 XML 解析 -
如果这是 XML 和代码,它应该返回 0 个元素,因为您正在寻找一个不存在的名称。例如,如果您将“Name2”替换为“Foo”,它将起作用。
-
值 Name2 的属性不在 CustDirectory 元素上吗?您似乎正在搜索 person 子元素..
标签: c# xml linq linq-to-xml