Классы XSD для Delphi без привязки к XML

#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.