Мне нужно написать приложение С++ (используя Qt Framework для GUI), который может редактировать данные, хранящиеся в xml файлах, описанных в файле схемы xsd. Есть ли инструмент для преобразования xsd-схемы в классы С++?
Схемы XML для классов С++
Ответ 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 также является опцией.
Ответ 6
Objective Systems, Inc. Компилятор XML-схемы XBinder (не только для С++).
Ответ 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 в С++, потому что инструменты для него ужасные.