#xml #delphi #xsd #code-generation
#xml #delphi #xsd #генерация кода
Вопрос:
Возможно, этот вопрос задавался ранее, но я не нашел его в отношении Delphi — я использовал XSD.exe в Visual Studio это делает именно это: преобразует XSD в «простые ванильные» классы, представляющие сущности, указанные в XSD — не привязанные к документу XML -классы для создания структур в XSD, без доступа к данным, которые соответствуют структуре, описанной в XSD.
Я ищу утилиту или продукт, который будет это делать (который не стоит больших денег …): Например, у меня есть схема, подобная этой:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="TDelphiClass">
<xs:complexType>
<xs:sequence>
<xs:element ref="ID"/>
<xs:element ref="ConnectionString"/>
<xs:element ref="Group"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ID" type="xs:integer"/>
<xs:element name="ConnectionString" type="xs:string"/>
<xs:element name="Group"type="xs:double"/>
</xs:schema>
Я хочу сгенерировать модуль / класс Delphi, который выглядит следующим образом:
unit uDelphiClass;
interface
uses
Classes, SysUtils;
type
TDelphiClass = class(TObject)
fID: Integer;
fConnectionString: string;
fGroup: Double;
end;
implementation
end.
Комментарии:
1. Добро пожаловать в SO. При редактировании ваших сообщений, пожалуйста, не удаляйте форматирование кода. Прочитайте FAQ (видимый во время редактирования) о форматировании кода: это помогает всем сохранять четкое представление о том, что вы имеете в виду.
Ответ №1:
Чтение между строк (пожалуйста, используйте меньше сокращений, например, VS имеет несколько значений, даже в вычислительной технике), и вы, вероятно, использовали XSD.EXE инструмент в Visual Studio или .NET SDK для генерации вашего исходного кода на C # или VB.NET язык.
Если у вас есть Delphi Prism, вы можете использовать XSD.EXE для генерации исходного кода Delphi Prism.
Язык Delphi Prism очень близок к родному языку Delphi, так что это даст вам толчок к началу работы.
Это должно работать и с пробной версией Delphi Prism.
Кстати: Почему вы не хотите использовать собственный код Delphi, сгенерированный мастером привязки данных XML, автономным способом? Он основан на интерфейсе, но довольно быстр и работает очень хорошо.
Комментарии:
1. извините за форматирование и т.д. — Обычно я не занимаюсь SO до ОЧЕНЬ ПОЗДНЕЙ ночи … и да, это было XSD.exe с несколькими параметрами для получения этого результата. Что касается мастера привязки данных delphi, если бы это была схема, подобная моему примеру, это не было бы проблемой — но с большой сложной схемой требуется много работы, чтобы все переделать — особенно потому, что мастер привязки данных предполагает, что вы сохраняете данные в xml-документе, и когда вам нужны «простые ванильные» классы delphi, вам нужно настроить поля и средства получения / установки свойств для этого. Изучим инструмент Prism. Tnx-MNG
2. @Mikey: обратите внимание, что большие сложные схемы обычно не могут автоматически отображаться на «обычные» языки программирования.
3. Я добился большого успеха с помощью инструмента MS, даже на довольно сложных схемах с вложенными классами, перечислениями, многочисленными ограничениями и т.д. Хитрость в том, чтобы знать, как написать ПРАВИЛЬНЫЙ XSD (нет, не все так просто …), чтобы генератор делал то, что вы хотите.
4. @Mikey: действительно! Жаль, что я обычно получаю внешний XSD для работы 🙂
5. будем надеяться, что JSON продолжит работу с G_R_O_W … намного приятнее!
Ответ №2:
http://sourceforge.net/projects/xxsd2code / генерирует C , C #, C / CLI и Java — и, похоже, включенные классы ‘LanguageWriter’ не слишком сложны, чтобы расширить их для Delphi. В Java LanguageWriter, например, меньше 400 строк. Если есть интерес в сообществе Delphi, это может быть реализовано и внесено в короткие сроки…
Комментарии:
1. Я проверю это. Но мне интересно, почему к этому никогда не было особого интереса. Я пишу в основном промежуточное программное обеспечение и код на стороне сервера, который часто приходится взаимодействовать с клиентами Java и C #. Лучший способ гарантировать, что каждый сможет с вами общаться, — это с самого начала определить ваши классы с помощью XSD.