webentwicklung-frage-antwort-db.com.de

XML-Schema in C++ - Klassen

Ich muss eine C++ - Anwendung schreiben (unter Verwendung des Qt Framework für die GUI), die Daten bearbeiten kann, die in XML-Dateien gespeichert sind, die von einer Xsd-Schemadatei beschrieben werden. Gibt es ein Tool zum Konvertieren des xsd-Schemas in C++ - Klassen?

25
Andre

Klingt für mich nach CodeSynthesis ist genau das, was Sie suchen. Es ist Open Source und C++.

24
mickus

gSOAP Toolkit kann das auch! Es ist leicht und unterstützt C/C++. Ich habe es bereits in sehr anspruchsvollen Projekten erfolgreich eingesetzt. Auch ist es unter GPL2 lizenziert.

Portabilität: gSOAP unterstützt die meisten Plattformen, einschließlich eingebetteter Systeme und kleiner Betriebssysteme (z. B. WinCE, Symbian und PalmOS). Die Portabilität wird für Windows (98, XP, Vista), Linux, Unix, Mac OS X, Solaris, AIX, FreeBSD, AIX, FreeBSD, TRU64, Irix, QNX und VxWorks getestet.

4
bhelm

Siehe XmlPlus-xsd2cpp bei Google:

XmlPlus xsd2cpp bietet "einfach zu verwendende" C++ XML-Datenbindung über das W3C-XML-Schema.

Die Verwendung von XmlPlus unterliegt der GNU Lesser General Public License

4
DavidRR

Altova XML Spy kann C++ aus einer XSD generieren, es ist kommerziell, aber es gibt eine 30-tägige kostenlose Testversion, wenn Sie es ausprobieren möchten.

4
Tom

Objective Systems, Inc. XBinder-XML-Schema-Compiler (nicht nur für C++).

3
Raphael Bossek

Codalogic LMX ist auch eine Option.

3
Pete Cordell

Ich glaube, es gibt ein Microsoft-Tool mit dem Namen xsd.exe (aber ich habe es selbst nicht versucht).

1
ChrisW

Alle Generatoren sind absolut schrecklich.

XSD beschreibt eine Klassenhierarchie, in der Klassen Unterklassen enthalten. Diese können andere Unterklassen enthalten und müssen nur auf dieselbe Weise dargestellt werden.

Zum Beispiel, wenn dies Ihr Schema ist:

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

Sie möchten etwas produzieren wie:

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

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

Du wirst es nicht finden. Das nächste, was ich gefunden habe, ist xjc, was für Java ist.

Sie würden etwas BASIC erwarten, da diese Funktionalität existieren würde, aber ich habe es noch nicht gefunden, und ja, ich habe Altova XML-Spy verwendet. Ich bin ernsthaft überrascht, dass jemand dies als Codegenerator vorschlagen würde. Der generierte Code ist absolut schrecklich.

Ich schreibe einen Lex/Bison-Parser, um dies für mein Projekt zu tun, da alle Tools, die ich bisher finden konnte, ziemlich schrecklichen Code produzieren. Altova hat eine 30-tägige Testphase. Wenn Sie mir nicht glauben, probieren Sie es aus. Es ist einfacher, einen Lex/Bison-Parser für meine XSD zu schreiben, als ein professionelles Code-Paket im Wert von 500 US-Dollar zu verwenden, das eine schreckliche Klassendarstellung erzeugt.

Ich kann nicht glauben, dass die Leute in C++ XML verwenden, weil die Tools dafür schrecklich sind.

0
user6269400