У меня есть классы, сгенерированные из схемы xsd с помощью xsd.exe. У меня нет контроля над схемой. Чтение, запись с помощью XmlSerlializer и проверка сериализованных данных работают нормально. Я хотел бы реализовать онлайн-проверку ошибок для моих данных, включая пользовательский ввод, на основе правил в схеме. Опять же, у меня нет проблем с сериализацией и проверкой, но тогда я не вижу простого способа отследить местонахождение ошибки, в каком экземпляре какого класса она произошла. Я нашел комментарий, в котором упоминается, что причина отсутствия XmlValidatingWriter заключается в том, что классы уже должны обеспечивать совместимость схемы, однако это неверно для классов, сгенерированных xsd.exe. (структура и типы хороши, но уникальные поля, совпадения шаблонов и т. д. не рассматриваются) Существует страница о Проверка XmlSchemaValidator на основе push, но мне это кажется очень ручным, полностью игнорируя тот факт, что все мои классы сериализуемы в xml.
Я нашел похожие вопросы, но, похоже, ни у кого нет этой конкретной цели, и я не смог найти ответ, который привел бы меня к решению. Я согласен с тем, что по какой-то причине это невозможно, как мне кажется сейчас, но я хотел бы понять причину и узнать, где вся моя архитектура пошла не так.
Спасибо.
XmlReader
реализуютIXmlLineInfo
.XElement
также реализует это. В зависимости от того, как вы проверяете свой XML, вы можете использовать его для извлечения местоположения ошибки по строкам этого ответа или вот этот. Можете ли вы отредактировать свой вопрос, чтобы поделиться минимальный воспроизводимый пример, показывающий, как вы проверяете свой XML? - person dbc   schedule 26.08.2017XmlSchemaException
содержит информацию о линии и позиции. Это прямо здесь, вXmlReaderSettings.ValidationEventHandler
так что вы должны быть готовы к работе. - person dbc   schedule 26.08.2017ValidationEventArgs
, содержащийXmlSchemaException
. - person dbc   schedule 26.08.2017