В C#/.NET 2.0, когда я сериализирую использование объекта XmlSerializer, что самый легкий путь состоит в том, чтобы проверить вывод против XML-схемы?
Проблема состоит в том, что слишком легко записать недопустимый XML с XmlSerializer, и я не могу найти способ проверить XML, который не выглядит громоздким. Идеально я ожидал бы устанавливать схему в XmlSerializer или иметь XmlWriter, который проверяет.
А как насчет повторного чтения с помощью проверяющего считывателя
Вот быстрый удар
Stream stream = new MemoryStream(Encoding.UTF8.GetBytes("<YourXml />"));
var input = mappingAssembly.GetManifestResourceStream(
"MySchema.xsd"
); //This could be whatever resource your schema is
var schemas = new XmlSchemaSet();
schemas.Add(
"urn:YourSchemaUrn",
XmlReader.Create(
input
)
);
var settings = new XmlReaderSettings
{
ValidationType = ValidationType.Schema,
Schemas = schemas
};
settings.ValidationEventHandler += MakeAHandlerToHandleAnyErrors;
var reader = XmlReader.Create(stream, settings);
while (reader.Read()) {} //Makes it read to the end, therefore validates
Вам понадобится обработчик, который что-то сделает, когда есть ошибки.
Вы можете использовать XmlReader для проверки XML-файла по схеме XSD.