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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
29
0
37 651
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Ответ принят как подходящий

Мне кажется, что КодСинтез - это именно то, что вы ищете. Это открытый исходный код и C++.

Стоит отметить, что открытый источник здесь немного сложнее. Код, сгенерированный КодСинтез, также покрывается лицензией GPL, поэтому вы не можете использовать его в своем приложении, не распространяя исходный код всего приложения. Однако есть исключения для использование небольшого объема или проприетарной лицензии на покупку.

Jarekczek 04.11.2012 12:12

Я не могу использовать CodeSynthesis в VS2019

Nguyễn Đức Tâm 29.11.2019 10:10

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

Могу ошибаться, но похоже, что это не поддерживает C++, только .Net C#, VB и J #.

Andre 15.01.2009 17:07

xsd.exe не поддерживает стандартный C++, только "управляемый" C++ от Microsoft, который использует материал CLR XML.

Matthew 08.01.2013 23:10

xsd.exe также может сгенерировать .xsd в код Cpp.

Nguyễn Đức Tâm 02.12.2019 08:11

Codalogic LMX - тоже вариант.

Objective Systems, Inc. Компилятор XML-схемы XBinder (не только для C++).

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

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

Имеет те же лицензионные ограничения, что и генератор CodeSynthesis.

Jan Hudec 13.05.2013 15:35

См. XmlPlus-xsd2cpp в Google:

XmlPlus xsd2cpp provides "simple to use" C++ XML data-binding through W3C XML-Schema.

Использование XmlPlus регулируется Стандартная общественная лицензия ограниченного применения GNU

Обратите внимание, что этот инструмент не принадлежит Google, он просто размещен на Google Code.

Beginner 10.10.2014 11:50

Выглядит многообещающе. К сожалению, xsd2cpp не поддерживает все спецификации xsd: / например. attributeGroups не поддерживаются.

ruuns 27.10.2019 12:56

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

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.

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

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

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

Можете ли вы показать нам пример того, что производят «плохие инструменты», и объяснить, почему вы считаете их плохими?

Ira Baxter 12.07.2016 22:09

Не могу ответить, так как я застрял в "форматировании mini-Markdown". Я привел вам пример схемы - запустите на нем шпион Altova XML и сравните его с примером, созданным MY вручную с помощью XSD-> C++ lex / bison / hack. Вперед, продолжать. Я не НАИМЕНЕЕ впечатлен доступными инструментами. XJC действительно производит довольно хороший код, однако он на Java, поэтому мне он не подходит. Я чувствую, что работаю с каменными ножами и медвежьими шкурами.

user6269400 13.07.2016 02:18

Не делайте шпиона Алтовой ... посмотрите на предложенную вами структуру классов и согласитесь, что это выглядит разумным. Может быть, вы сможете объяснить в 1-2 предложениях, что вам не нравится в Альтове.

Ira Baxter 13.07.2016 02:30

Что ж, моя пробная лицензия на AltovaSpy истекла, и хотя я могу использовать свой компьютер задним числом, чтобы заставить его работать, я не собираюсь беспокоиться. Если вы действительно хотите знать, насколько ужасны эти инструменты, просто получите пробную лицензию. Алтова хорошо разбиралась в визуальном представлении. Я могу сказать это, это чрезвычайно многословно, они широко используют чрезвычайно длинные имена префиксов, они используют свои собственные внутренне определенные типы вместо очевидных вещей, таких как «строка» или даже «int», данные не хранятся в самом классе , но вместо этого внутри потока, так что это сводится к синтаксическому анализатору, а не к набору контейнеров.

user6269400 13.07.2016 02:50

Предназначено ли использование потоков для решения проблемы действительно огромных файлов XML?

Ira Baxter 13.07.2016 05:23

Я не знаю, но в конечном итоге у вас есть куча классов, с которыми очень сложно работать.

user6269400 13.07.2016 20:39

Другие вопросы по теме