web-dev-qa-db-fra.com

Schéma XML pour les classes C++

Je dois écrire une application C++ (utilisant le framework Qt pour l'interface graphique) capable de modifier les données stockées dans des fichiers XML décrits par un fichier de schéma xsd. Existe-t-il un outil pour convertir le schéma xsd en classes C++?

25
Andre

Cela me semble CodeSynthesis est exactement ce que vous recherchez. C'est open source et c ++.

24
mickus

gSOAP Toolkit peut le faire aussi! C'est léger et supporte le C/C++. Je l'ai déjà utilisé avec succès dans des projets très exigeants. En outre, sa licence est sous GPL2.

Portabilité: gSOAP prend en charge la plupart des plateformes, y compris les systèmes intégrés et les petits systèmes d'exploitation (WinCE, Symbian et PalmOS, par exemple). La portabilité est testée pour Windows (98, XP, Vista), Linux, Unix, Mac OS X, Solaris, HP-UX, AIX, FreeBSD, TRU64, Irix, QNX et VxWorks.

4
bhelm

Voir XmlPlus-xsd2cpp sur Google:

XmlPlus xsd2cpp fournit une liaison de données XML C++ "simple à utiliser" via le schéma XML W3C.

L'utilisation de XmlPlus est couverte par la GNU Licence publique générale inférieure

4
DavidRR

Altova XML Spy peut générer du C++ à partir d’un XSD, c’est commercial, mais il ya un essai gratuit de 30 jours si vous voulez l’essayer.

4
Tom

Objective Systems, Inc. Compilateur de schémas XML XBinder (pas seulement pour C++).

3
Raphael Bossek

Codalogic LMX est également une option.

3
Pete Cordell

Je pense qu’il existe un outil Microsoft appelé xsd.exe (mais je ne l’ai pas essayé moi-même).

1
ChrisW

Tous les générateurs sont absolument terribles.

XSD décrit une hiérarchie de classes dans laquelle les classes contiennent des sous-classes, qui peuvent contenir d'autres sous-classes. Tout ce que vous voulez faire, c'est la représenter de la même manière.

Par exemple, s'il s'agit de votre schéma:

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

Vous voudriez produire quelque chose comme:

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

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

Tu ne vas pas le trouver. La chose la plus proche que j'ai trouvée est xjc, qui est pour Java.

Vous vous attendriez à quelque chose d'aussi basique que cette fonctionnalité existerait, mais je ne l'ai pas encore trouvée, et oui, j'ai utilisé Altova XML-Spy. Je suis sérieusement surpris que quiconque suggère cela en tant que générateur de code. Son code généré est absolument affreux.

J'écris un analyseur syntaxique Lex/bison pour le faire pour mon projet, car tous les outils que j'ai pu trouver jusqu'à présent produisent un code assez horrible. Altova a une période d'essai de 30 jours. Si vous ne me croyez pas, essayez-le. Il est plus facile d'écrire un analyseur syntaxique Lex/bison pour mon XSD que d'utiliser un package de code professionnel à 500 $ produisant une représentation de classe terrible.

Je ne peux pas croire que les gens utilisent XML en C++ parce que les outils utilisés sont terribles.

0
user6269400