我有一个包含一堆对象的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>
我应该只从文件中读取具有名称和至少一个字段的对象。有效字段必须具有名称,类型(字符串或整数)和值。我写了这个查询:
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>
,这会导致异常。如何跳过带有损坏标签的对象/字段并处理此查询中的异常?