【发布时间】:2015-07-07 01:02:26
【问题描述】:
我有一个IEnumerable<XElement> 对象,我想根据某个节点值进行查询,但不断收到null element 错误。如何根据搜索到的元素的值选择两个元素的值?我正在尝试返回firstName 和lastName 其中ID == somevalue。
这是我的 XML 的结构:
<Profile>
<ID>123</ID>
<firstName>Not</firstName>
<lastName>Registered</lastName>
</Profile>
我的查询片段:
XDocument xdoc = XDocument.Load(someXml);
IEnumerable<XElement> nodes = xdoc.Root.Elements();
XNamespace ns = "xmlNamespace";
var name = nodes.Elements(ns + "firstName")
.Where(x => (int)x.Element(ns + "ID") == 123)
.SingleOrDefault();
我的查询基于this 文章,但我仍然找不到返回我想要的内容的混合物。
更新
我已尝试以下建议的答案,但仍然没有看到任何结果或收到Object reference not set to an instance of an object 异常。
我仍在解决这个问题,现在正在尝试这个:
var result = xdoc
.Descendants(ns + "Profile")
.Where(x => (int)x.Element(ns + "ID") == 1)
.Select(x => new { FirstName = (string)x.Element(ns + "firstName"), LastName = (string)x.Element(ns + "lastName") })
.FirstOrDefault();
单步执行时,查询在运行Where 子句后挂起。
【问题讨论】:
-
为什么在这里使用
XNamespace,实际的XML有命名空间吗? -
还有哪一行正好抛出空引用异常?
-
您的 Xml 中是否只有一个元素?如果没有,那么根元素是什么,如果有的话。
-
@har07 是的,有一个命名空间
<source xmlns='http://www.mysource.com/source'>,然后继续拥有子<Profile>节点。 -
@user2596756:您知道您可以为您的问题选择答案吗?
标签: c# xml linq linq-to-xml