C# LINQ查询中的异常处理

C# LINQ查询中的异常处理,c#,xml,exception,C#,Xml,Exception,我有一个包含大量对象的XML文件,这些对象可以有多个字段,例如: <object> <obj_name>Car</obj_name> <field> <name>Brand</name> <type>string</type> <value>Volvo</value> </field> <field> &l

我有一个包含大量对象的XML文件,这些对象可以有多个字段,例如:

<object>
  <obj_name>Car</obj_name>
  <field>
    <name>Brand</name>
    <type>string</type>
    <value>Volvo</value>
  </field>
  <field>
    <name>Power</name>
    <type>int</type>
    <value>200</value>
  </field>
</object>
我应该只从文件中读取具有名称和至少一个字段的对象。要有效的字段必须具有名称、类型字符串或int和值。我写了这个查询:

var objects = from newobject in 
              XDocument.Load("input.xml").Descendants("object")
                     where (string)newobject.Element("obj_name") != ""
                     select new DataObject
                     {

                         Name = (string)newobject.Element("obj_name"),
                         Fields = new List<Field>(
                             from fields in newobject.Elements("field")
                             where (string)fields.Element("name") != ""
                             where (string)fields.Element("type") != "" && ((string)fields.Element("type") == "string" || (string)fields.Element("type") == "int")
                             where (string)fields.Element("value") != ""
                             select new Field
                             {
                                 Name = (string)fields.Element("name"),
                                 Type =  (string)fields.Element("type"),
                                 Value = (string)fields.Element("value")                                
                             })    
                     };

它工作正常,但问题是文件也可能有无效的标记,例如导致异常的Bob。如何跳过标记已断开的对象/字段并处理此查询中的异常?

在运行c之前,必须修复错误。Net library XML类不允许读取任何带有匹配标记错误的XML文件。您可以使用文本类读取文件,然后进行修复,但强烈建议您修复这些XML错误,不要编写kludge软件来解决实际问题。我个人认为,如果XML无效,您不应该从中读取任何数据。我的意思是,你想如何跳过元素。名称标记是否真的在标记后关闭?如果一个>完全丢失了怎么办。我看不到可靠地解析损坏的xml的好方法,我的任务是编写一个能够处理此类错误的查询,这样我就无法在阅读之前修复它。一个标记被另一个标记关闭是唯一无效的数据情况,文件不会丢失<或'>'。有一些实用程序试图修复损坏的XML,例如XMLTidy。然而,这有点像试图修复损坏的Java或C代码,或者确实像拼写校正器——它可能总是产生语法上有效的东西,但并不总是作者想要的东西。首先修复生成错误XML的程序要好得多。我可以肯定你的观点,但这是一项招聘任务,XML文件是给定的。你必须在运行c之前修复错误。Net library XML类不允许读取任何带有匹配标记错误的XML文件。您可以使用文本类读取文件,然后进行修复,但强烈建议您修复这些XML错误,不要编写kludge软件来解决实际问题。我个人认为,如果XML无效,您不应该从中读取任何数据。我的意思是,你想如何跳过元素。名称标记是否真的在标记后关闭?如果一个>完全丢失了怎么办。我看不到可靠地解析损坏的xml的好方法,我的任务是编写一个能够处理此类错误的查询,这样我就无法在阅读之前修复它。一个标记被另一个标记关闭是唯一无效的数据情况,文件不会丢失<或'>'。有一些实用程序试图修复损坏的XML,例如XMLTidy。然而,这有点像试图修复损坏的Java或C代码,或者确实像拼写校正器——它可能总是产生语法上有效的东西,但并不总是作者想要的东西。首先修复生成错误XML的程序要好得多。我可以肯定你的观点,但这是一项招聘任务,XML文件是给定的。