我有一个客户端发送一个xml feed我使用以下代码解析.这段代码有效.
reviews = from item in xmlDoc.Descendants("node")
select new ForewordReview()
{
PubDate = (string)item.Element("created"),
Isbn = (string)item.Element("isbn"),
Summary = (string)item.Element("review")
};
Run Code Online (Sandbox Code Playgroud)
获得所有"评论"后,我将IEnumerable转换为List并将其返回.最初,我有一个很好的,很容易解析他们的XML,这看起来像这样:
<reviews>
<node>
<created>01-01-1900</created>
<ISBN>12345657890123</ISBN>
<Review>This is a nice and silly book</Review>
</node>
<node>
<created>01-01-2011</created>
<ISBN>1236245234554</ISBN>
<Review>This is a stupid book</Review>
</node>
<node>
<created>12-06-1942</created>
<ISBN>1234543234577</ISBN>
<Review>This is a old, naughty book</Review>
</node>
</reviews>
Run Code Online (Sandbox Code Playgroud)
然而,他们已经改变了我们无法访问的模式,现在他们的XML在最终<node>标签中添加了一个不包含我正在寻找的死神元素的结尾,所以,我的解析就打破了这最后一个标签,我抛出一个异常.这是一个例子:
<reviews>
<node>
<created>01-01-1900</created>
<ISBN>12345657890123</ISBN>
<Review>This is a nice and silly book</Review>
</node>
<node>
<created>01-01-2011</created>
<ISBN>1236245234554</ISBN>
<Review>This is a stupid book</Review>
</node>
<node>
<created>12-06-1942</created>
<ISBN>1234543234577</ISBN>
<Review>This is a old, naughty book</Review>
</node>
<node>
<count>4656</count>
</node>
</reviews>
Run Code Online (Sandbox Code Playgroud)
我需要知道是否有一种方法可以忽略这个最终标记(它总是在文档的末尾),即使它与我正在寻找的所有其他"节点"标记具有相同的名称.我确实尝试了解这段代码,但如果它看到这个错误,它就不会返回好的评论列表.
多谢你们.
添加空值检查
PubDate = (string)(item.Element("created") ?? ""),
Isbn = (string)(item.Element("isbn") ?? ""),
Summary = (string)(item.Element("review") ?? "")
Run Code Online (Sandbox Code Playgroud)
始终为您所做的一切添加空检查。只是好的做法。在这种情况下,它将消除此错误,但稍后可能会在程序中出现错误,您假设这些字符串不为空,因此稍后也请确保并进行空检查。
| 归档时间: |
|
| 查看次数: |
386 次 |
| 最近记录: |