Каков будет лучший способ проверки XML? - PullRequest
1 голос
/ 24 января 2010

Я смотрел на сериализацию XML для C #, и это выглядит интересно. Я читал этот урок

http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization

и, конечно, вы можете сериализовать его обратно в список объектов. Поэтому мне интересно, лучше ли будет сериализовать его обратно в список объектов, а затем пройтись по каждому объекту и проверить его или проверить его с помощью схемы, затем сериализовать его и делать с ним что-нибудь?

http://support.microsoft.com/kb/307379

Спасибо

Ответы [ 4 ]

1 голос
/ 24 января 2010

Полагаю, это будет немного зависеть от того, что вы хотите проверить и с какой целью. Если он предназначен для взаимодействия с другими системами, то проверка с помощью xsd является разумной идеей не в последнюю очередь потому, что вы можете использовать xsd.exe для написания своих классов для вас из xsd (вы также можете генерировать xsd из xml или dll, но это не так. не так точно). Также вы можете использовать XmlReader (соответствующим образом настроенный) для проверки xsd,

Если вы просто хотите иметь действительные объекты .NET, я бы хотел оставить сериализованную форму в качестве подробного описания реализации и написать некоторый проверочный код C # - возможно, реализующий IDataErrorInfo или с использованием аннотаций данных.

0 голосов
/ 24 января 2010

Если вы проверяете XML, вы можете только доказать, что он структурно корректен. Попытка десериализации из XML скажет вам то же самое.

Обычно бизнес-объекты могут реализовывать бизнес-логику / правила / условия, выходящие за рамки допустимой схемы. Знания такого типа должны оставаться в самих бизнес-объектах, а не дублироваться в какой-либо подпрограмме внешней проверки (в противном случае, если вы изменяете бизнес-правило, вы должны обновить валидатор одновременно).

0 голосов
/ 24 января 2010

Для скорости я бы сделал это в C #, однако для полноты вы можете сделать это с помощью XSD. Проблема заключается в том, что вам нужно выучить многословный и громоздкий синтаксис XSD, который, как показывает опыт, требует много проб и ошибок, отнимает много времени и не приносит большого вознаграждения за сериализацию. Особенно с константами, где вы должны отобразить их в C #, а также в XSD.

Вы всегда будете писать XML как C #. Все, что не известно при обратном чтении, просто игнорируется. Если вы не редактируете XML с помощью текстового редактора, вы можете гарантировать, что он вернется правильно, и в этом случае XSD определенно не нужен.

0 голосов
/ 24 января 2010

Вы можете создать XmlValidatingReader и передать его в ваш сериализатор. Таким образом, вы можете прочитать файл за один проход и проверить его одновременно.

Я полагаю, что тот же метод будет работать, даже если вы используете классы XML, свернутые вручную (для очень больших файлов XML), так что вы можете найти его достойным внимания.

Edit:

Извините, просто перечитайте часть моего кода, XmlValidatingReader устарел, вы можете делать все, что вам нужно, с XmlReader.

См. Настройки XmlReader

...