У меня есть 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>
Мне следует читать из файла только объекты, которые имеют имя и хотя бы одно поле. Допустимое поле должно иметь имя, тип (string или 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")
})
};
Работает нормально, но проблема в том, что в файле также могут быть недействительные теги, например <name>Bob</type>
, которые вызывают исключения. Как я могу пропустить объекты / поля со сломанными тегами и обработать исключения в этом запросе?