Xdocument.element(" Root")可能的system.nullreferenceexception

时间:2016-03-18 13:44:21

标签: asp.net-mvc model-view-controller

当我尝试使用XML制作下拉列表时,我的项目出现问题。当我打电话给Xdocument.element("Root")时,重新分析的人告诉我可能的' System.NullReferenceException'而且我不知道为什么 这是我的代码

public JsonResult LoadProvince()
        {
            var xmlDoc = XDocument.Load(Server.MapPath(@"~/assets/client/data/Provinces_Data.xml"));
            var xElements = xmlDoc.Element("Root").Elements("Item").Where(x=>x.Attribute("type").Value=="province"); //here is the line I got the NullReferenceException

            var list = new List<ProvinceModel>();
            ProvinceModel province = null;
            foreach (var item in xElements)
            {
                province = new ProvinceModel();
                province.ID = int.Parse(item.Attribute("id").Value);
                province.Name = item.Attribute("value").Value;
                list.Add(province);
            }
            return Json(new
            {
                data=list,
                status = true
            });
        }

这是我的XML文件的类型

<Root>
    <Item id="" type="" value=""></Item>
    <Item id="101" type="province" value="POI">
        <Item id="10151" type="district" value="ABC">
            <Item id="1015149" type="precinct" value="XYZ"/>
            <Item id="1015135" type="precinct" value="LKJ"/>
            <Item id="1015139" type="precinct" value="TYU"/>
</Root>

有什么好主意帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

因为ReSharper并不确切地知道你在做什么,并且只检测到你正在调用对象上的方法,如果方法调用更高,那么该链上的方法可能为null。就这些。你可以忽略它。或者,如果需要,可以使用条件空运算符(?)。

答案 1 :(得分:0)

因为您的XML无效?我制作了一个示例项目,当我将XML修改为以下内容时:

el[0].removeEventListener('click', click)

当我在控制台应用程序中执行以下代码时:

el.unbind('click');

我没有问题。 ReSharper对&#34; xmlDoc.Element(&#34; Root&#34;)&#34;感到紧张。但程序运行得很好。

如果您想知道输出是:

<Root>
  <Item id="" type="" value=""/>
  <Item id="101" type="province" value="POI"/>
  <Item id="10151" type="district" value="ABC"/>
  <Item id="1015149" type="precinct" value="XYZ"/>
  <Item id="1015135" type="precinct" value="LKJ"/>
  <Item id="1015139" type="precinct" value="TYU"/>
</Root>

另外,你不需要.Element(&#34; Root&#34;)。做XDoc.Root更好。

答案 2 :(得分:0)

Resharper试图提供帮助。它并不一定意味着你做错了什么。

XDocument.Element 可能如果找不到指定的元素,则返回null。 Resharper实际上并不知道XML文件的样子。它试图告诉您,您没有处理可能返回null的情况,这会导致NullReferenceException

如果您可以保证它永远不会为空引用,那么您可以忽略该警告。如果某人可以上传XML文件而你只是认为它结构合理,那么你可能想要处理这种情况,例如:

 var root = document.Element("Root");
 if (root == null)
 {
     //handle null here
 }