Подтвердить что ты не робот

Схемы XML для классов С++

Мне нужно написать приложение С++ (используя Qt Framework для GUI), который может редактировать данные, хранящиеся в xml файлах, описанных в файле схемы xsd. Есть ли инструмент для преобразования xsd-схемы в классы С++?

4b9b3361

Ответ 1

Мне кажется, что CodeSynthesis - именно то, что вы ищете. Это open source и С++.

Ответ 2

Altova XML Spy может генерировать С++ из XSD, он коммерческий, но есть 30-дневная бесплатная пробная версия, если вы хотите попробовать.

Ответ 3

gSOAP Toolkit тоже может это сделать! Его легкий и поддерживает C/С++. Я уже успешно использовал его в очень сложных проектах. Кроме того, он лицензирован под GPL2.

Портативность: gSOAP поддерживает большинство платформ, включая встроенные системы и небольшую ОС (например, WinCE, Symbian и PalmOS). Переносимость протестирована для Windows (98, XP, Vista), Linux, Unix, Mac OS X, Solaris, HP-UX, AIX, FreeBSD, TRU64, Irix, QNX и VxWorks.

Ответ 4

Смотрите XmlPlus-xsd2cpp в Google:

XmlPlus xsd2cpp обеспечивает "простую в использовании" привязку данных XML на С++ через XML-схема W3C.

Использование XmlPlus распространяется на GNU Lesser General Public License

Ответ 5

Codalogic LMX также является опцией.

Ответ 7

Есть инструмент Microsoft, который делает это, я думаю, называемым xsd.exe (но я сам не пробовал).

Ответ 8

Все генераторы абсолютно ужасны.

XSD описывает иерархию классов, в которой классы содержат подклассы, которые могут содержать другие подклассы, и все, что вы хотите сделать, представляют его таким же образом.

Например, если это ваша схема:

<xs:element name="shipto">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="address" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="country" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element> 

Вы хотите создать что-то вроде:

class shipTo
{
  private:
    string name;
    string address;
    string city;
    string country;

  public:
    set_Name();
    get_Name();
    ...
}

Вы не найдете его. Самое близкое, что я нашел, это xjc, который для Java.

Вы ожидали бы что-то как BASIC, поскольку эта функциональность будет существовать, но я ее еще не нашел, и да, я использовал Altova XML-Spy. Я серьезно удивлен, что кто-нибудь предложит это как генератор кода. Сгенерированный код абсолютно ужасен.

Я пишу парсер lex/bison, чтобы сделать это для моего проекта, потому что все инструменты, которые я смог найти, производят довольно ужасный код. Altova имеет 30-дневный пробный период, если вы мне не верите, попробуйте. Легче написать парсер lex/bison для моего XSD, чем использовать профессиональный пакет кода на 500 долларов, который создает ужасное представление класса.

Я не могу поверить, что люди используют XML в С++, потому что инструменты для него ужасные.