【发布时间】:2012-02-14 20:02:41
【问题描述】:
以下 XML 可能包含错误。
如果不是,结果仍然输出
string xml =
"<response>
<total>1</total>
<bla>bla bla bla</bla>
<error></error>
</response>";
在我的代码中,我以这种方式加载 xml:
XDocument doc = XDocument.Parse(xml);
XElement responseNode = doc.Element("response");
并以这种方式解析错误标记:
List<Error> Errors = (from w in doc.Descendants("error")
select new Error
{
ErrorCode = w.ElementValueInt("errorcode"),
ErrorMessage = w.ElementValueString("errormessage")
}).ToListSafely<Error>();
问题:
当没有错误时,我仍然得到 Count = 1,
因为 doc.Descendants("error") 找到了 "
有没有办法告诉 LINQ 代码排除空节点
加载和解析节点时?
回答:
我只需要在 LINQ 上添加“where (w.HasElements)”,所以
List<Error> Errors = (from w in doc.Descendants("error")
where (w.HasElements)
select new Error
{
ErrorCode = w.ElementValueInt("errorcode"),
ErrorMessage = w.ElementValueString("errormessage")
}).ToListSafely<Error>();
...它的工作原理!!!
【问题讨论】:
-
您可以在下面的字段中回答您自己的问题,然后将其标记为正确 - 这在 SO 上是可以接受的。阻止人们查看认为未回答的问题,并邀请希望查看已回答问题的人。