<?xml version="1.0" encoding="utf-8" ?>
<pages>
<page id="56">
<img id="teaser" src="img/teaser_company.png"></img>
</page>
</pages>
Run Code Online (Sandbox Code Playgroud)
我有一个xml文件,它定义了cms中页面的附加资源.使用LinqToXml查询此文件时,保护Null Reference异常的最佳方法是什么?
var page = (from tabElement in extensionsDoc.Descendants("page")
where tabElement.Attribute("id").Value == tabId.ToString()
select tabElement).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
如果页面元素没有名为"id"的属性,则此代码可能会触发Null Reference异常.我是否必须使用try catch块或有办法处理这个问题?例如,如果页面元素没有名为"id"的属性,则为页面对象返回null.
<books>
<book name="Christmas Cheer" price="10" />
<book name="Holiday Season" price="12" />
<book name="Eggnog Fun" price="5" special="Half Off" />
</books>
Run Code Online (Sandbox Code Playgroud)
我想用linq解析它,我很好奇其他人用什么方法处理特殊问题.我目前的工作方式是:
var books = from book in booksXml.Descendants("book")
let Name = book.Attribute("name") ?? new XAttribute("name", string.Empty)
let Price = book.Attribute("price") ?? new XAttribute("price", 0)
let Special = book.Attribute("special") ?? new XAttribute("special", string.Empty)
select new
{
Name = Name.Value,
Price = Convert.ToInt32(Price.Value),
Special = Special.Value
};
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法来解决这个问题.
谢谢,
我面临的情况是使用Linq将XML文档解析为对象.在解析期间,我正在检查以确保在继续解析其值之前,Elements不为null.无论如何要简化这个陈述吗?
var variable = (from x in xdoc.Descendants("Root")
select new AccountingResponse
{
NetCharge = x.Element("Charges") != null && x.Element("Charges").Element("NetCharge") != null ? x.Element("Charges").Element("NetCharge").Value : "0",
TotalCharge = x.Element("Charges") != null && x.Element("Charges").Element("TotalCharge") != null ? x.Element("Charges").Element("TotalCharge").Value : "0"
}).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
总而言之,我不想继续检查每一行上是否存在节点.我知道我可以在解析之前测试节点是否存在,但可能还有其他数据需要解析才能创建AccountingResponse,我想避免if语句一次只解析一部分XML.
或许我完全错了,这是一个更好的方法!