#c# #xml #xsd #xsd.exe
Вопрос:
Мне нужно преобразовать около 100 схем XSD в классы C#. Проблема в том, что я не могу этого сделать. Мне никогда не приходилось иметь дело со схемой XSD. Некоторые из этих схем зависят от других, и это все усложняет. Я попытался использовать стандартный инструмент xsd для данной проблемы, но это не помогло. Когда я передал один файл, он не захотел генерироваться из-за инструкций include.
Когда я создал файл со всеми моими схемами XSD:
<xsd xmlns = 'http: //microsoft.com/dotnet/tools/xsd/'>
<generateClasses language = 'CS' namespace = 'Namespace.subnamespace'>
<schema> BaseTypes.xsd </schema>
... (other schemas)
</generateClasses>
</xsd>
затем я получаю сообщение об ошибке:
Классы генерации ошибок для схемы — Схема с целевым пространством имен = ‘Mynamespace’ имеет недопустимый синтаксис. Сложный тип «Абстрактная характеристика» уже объявлен.
Хотя я точно знаю, что недопустимого синтаксиса нет, но у него есть циклические зависимости.
Я попробовал использовать LiquidStudio. Он справился с задачей, но в конце концов я не получил того, что хотел (я хочу получить классы, которые независимы от сторонних библиотек в выводе, как xsd.exe
и делает).
Я пытался использовать xsd2code там, я не нашел, как работать с большим количеством схем, у него также есть проблемы в работе, иногда он просто генерирует пустой файл, если исключить внешние зависимости, хотя внутри есть данные, независимые от внешних включенных данных, из которых вам нужно создать класс.
Комментарии:
1. Я бы переосмыслил весь подход. «Привязка данных» (сопоставление XML с классами на языке OO, таком как Java или C#) хорошо работает для простых стабильных схем. Для любого XML с такой сложностью промышленного масштаба, как этот, он имеет тенденцию разрушаться. Даже если вы сможете заставить генерацию классов работать, у вас останется неуправляемый беспорядок кода на C#, которым гораздо сложнее управлять, чем если бы вы использовали общие технологии XML, такие как XSLT или LINQ. И когда схема меняется, управление воздействием на ваш код C# становится кошмаром.