Да, вам нужно использовать проверяющий читатель
Вы можете использовать что-то вроде этого
XmlTextReader r = new XmlTextReader("C:\\Xml\\MyXmlFile.xml");
v.ValidationType = ValidationType.Schema;
Очевидно, что ваш xml будет ссылаться на схему, так что ссылка на нее будет решена (в самом xml), как это делается
<Employee EmployeeId="12345566"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Employee.xsd">
<PersonName>Krystan</PersonName>
</Employee>
если вы не можете изменить xml, вы можете использовать XmlReaderSettings следующим образом
public void SomeMethod()
{
XmlReaderSettings xmlsettings = new XmlReaderSettings();
xmlsettings.Schemas.Add("http://www.company.com/blah", "blah.xsd");
xmlsettings.ValidationType = ValidationType.Schema;
xmlsettings.ValidationEventHandler += new ValidationEventHandler(ValidationHandler);
XmlReader reader= XmlReader.Create("somefile.xml", xmlsettings);
while (reader.Read()) { }
}
public void ValidationHandler(object sender, ValidationEventArgs args)
void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
Console.Write("WARNING: ");
Console.WriteLine(e.Message);
}
else if (e.Severity == XmlSeverityType.Error)
{
Console.Write("ERROR: ");
Console.WriteLine(e.Message);
}
}
чтобы ответить на ваш вопрос, если вы проверили по схеме и выбираете узлы, которые, как известно, находятся там, вы можете обойтись без обработки исключений для каждого узла, но, очевидно, вам следует остерегаться исключения, которое может возникнуть из-за загрузки файла и т. Д.