相关疑难解决方法(0)

你如何防范Linq To Xml中的空引用异常?

<?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.

xml linq exception-handling linq-to-xml

12
推荐指数
2
解决办法
1万
查看次数

Linq To Xml 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)

我想知道是否有更好的方法来解决这个问题.

谢谢,

  • 贾里德

c# linq linq-to-xml

10
推荐指数
1
解决办法
6359
查看次数

检查Null元素的XML到LINQ

我面临的情况是使用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.

或许我完全错了,这是一个更好的方法!

c# linq xml-parsing

4
推荐指数
1
解决办法
4426
查看次数

标签 统计

linq ×3

c# ×2

linq-to-xml ×2

exception-handling ×1

xml ×1

xml-parsing ×1