Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在LINQ to XML中选择,错误:对象引用未设置为对象的实例_Xml_Linq_Linq To Xml - Fatal编程技术网

无法在LINQ to XML中选择,错误:对象引用未设置为对象的实例

无法在LINQ to XML中选择,错误:对象引用未设置为对象的实例,xml,linq,linq-to-xml,Xml,Linq,Linq To Xml,我不熟悉使用Linq转换XML,遇到了一个相当麻烦的错误。当尝试拉入XML文件时,我得到一个错误,读取未设置为对象实例的对象引用。它说错误是因为我试图使用select new语句。我已在下面附上我的代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; u

我不熟悉使用Linq转换XML,遇到了一个相当麻烦的错误。当尝试拉入XML文件时,我得到一个错误,读取未设置为对象实例的对象引用。它说错误是因为我试图使用select new语句。我已在下面附上我的代码:

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;
 using System.Web.UI;
 using System.Web.UI.WebControls;
 using System.Xml.Linq;
 public partial class _Default : System.Web.UI.Page
 {
 protected void Page_Load(object sender, EventArgs e)
 {
     XDocument feed = XDocument.Load(Server.MapPath("VEHICLES.XML"));
     var query = from c in feed.Descendants("VEHICLES")
                 where (string) c.Element("VehicleType").Value == "0"
                 select new
                 {
                     Vin = c.Element("Vin").Value,
                     Status = c.Element("VehicleType").Value,
                     Year = c.Element("Year").Value
                 };

    CarLister.DataSource = query;
    CarLister.DataBind();
  }
}
代码使用select c在所有节点中运行良好;而不是选择New,但理想情况下,我只希望选择某些信息片段,并且在将它们拉入时需要修改一些条目。我真的不知道是什么导致了这个问题,所以任何关于如何解决它的建议或想法都将不胜感激,如果您需要任何其他信息,请询问

看起来xml数据中的某个车辆节点没有Vin、车辆类型或年份

试一试

或者类似于xml数据中的某个车辆节点没有Vin、车辆类型或年份

试一试


或者类似于这些方面的问题是,您到处都在使用Value属性-如果foo.Element的结果。。。由于缺少元素,返回null。幸运的是,有一个简单的解决方法——相反。如果输入为null,XElement显式转换为字符串将返回null,这非常方便

var query = from c in feed.Descendants("VEHICLES")
            where (string) c.Element("VehicleType") == "0"
            select new
            {
                Vin = (string) c.Element("Vin"),
                Status = (string) c.Element("VehicleType"),
                Year = (string) c.Element("Year")
            };
在元素没有子元素或子元素的情况下,它将继续存在


但是,如果此故障实际上意味着数据一开始无效,您可能仍然需要异常。这取决于您在多大程度上依赖于数据以使其正常运行。

问题在于您在任何地方都使用Value属性-如果foo.Element的结果。。。由于缺少元素,返回null。幸运的是,有一个简单的解决方法——相反。如果输入为null,XElement显式转换为字符串将返回null,这非常方便

var query = from c in feed.Descendants("VEHICLES")
            where (string) c.Element("VehicleType") == "0"
            select new
            {
                Vin = (string) c.Element("Vin"),
                Status = (string) c.Element("VehicleType"),
                Year = (string) c.Element("Year")
            };
在元素没有子元素或子元素的情况下,它将继续存在


但是,如果此故障实际上意味着数据一开始无效,您可能仍然需要异常。这取决于你一开始对数据的依赖程度。

是的,这让它工作起来更干净了,哈哈,谢谢你的帮助!是的,这让它工作了哈哈,干净多了,谢谢你的帮助!