2009-01-15 4 views
24

Ich muss eine C++ - Anwendung schreiben (mit dem Qt-Framework für die GUI), die Daten in xml-Dateien, die durch eine xsd-Schemadatei beschrieben werden, bearbeiten kann. Gibt es ein Tool zum Konvertieren des Xsd-Schemas in C++ - Klassen?XML-Schema zu C++ - Klassen

Antwort

23

Klingt mir wie CodeSynthesis ist genau das, was Sie suchen. Es ist Open Source und C++.

+18

Es ist erwähnenswert, dass * Open Source * ist ein bisschen schwierig hier. Der von * CodeSynthesis * generierte Code wird ebenfalls von der GPL-Lizenz abgedeckt, sodass Sie ihn nicht in Ihrer Anwendung verwenden können, ohne den Quellcode Ihrer gesamten Anwendung zu verteilen. Es gibt Ausnahmen für [geringe Nutzung] (http://www.codesynthesis.com/products/xsd/free-license.xhtml) oder eine proprietäre Lizenz zum Kauf. – Jarekczek

3

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

0

Es gibt ein Microsoft-Tool, das dies, glaube ich, genannt xsd.exe (aber ich habe es selbst nicht versucht).

+8

Ich könnte falsch liegen, aber es scheint, dass dies nicht unterstützt C++, nur .Net C#, VB und J # – Andre

+5

xsd.exe unterstützt nicht Standard C++, nur Microsoft "verwaltet" C++, die die CLR-XML-Zeug verwendet. – Matthew

2

ist auch eine Option.

3

gSOAP Toolkit kann dies auch tun! Es ist leicht und unterstützt C/C++. Ich habe es bereits in sehr anspruchsvollen Projekten mit Erfolg 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 wurde für Windows (98, XP, Vista), Linux, Unix, Mac OS X, Solaris, HP-UX, AIX, FreeBSD, TRU64, Irix, QNX und VxWorks getestet.

+3

Scheint die gleiche Lizenzbeschränkung zu haben wie der CodeSynthesis-Generator. –

3

Siehe XmlPlus-xsd2cpp bei Google:

XmlPlus xsd2cpp bietet "einfach zu bedienen" C++ XML Datenbindung durch W3C XML-Schema.

Verwendung von XmlPlus wird durch die GNU Lesser General Public License bedeckt

+2

Bitte beachten Sie, dass das Tool nicht von Google ist, sondern nur bei Google Code gehostet wird. – Beginner

0

die Generatoren sind alle absolut schrecklich.

XSD beschreibt eine Klassenhierarchie, in der Klassen Unterklassen enthalten, die andere Unterklassen enthalten können und die Sie nur auf die gleiche Weise darstellen möchten.

Zum Beispiel, wenn dies Ihr Schema:

<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 möchten, etwas produzieren:

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

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

Sie sind nicht es geht zu finden. Das nächste, was ich gefunden habe, ist xjc, was für Java ist.

Sie würden etwas so BASIC erwarten, wie 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 irgendjemand dies als Code-Generator vorschlagen würde. Sein generierter Code ist absolut schrecklich.

Ich schreibe einen Lex/Bison-Parser, um dies für mein Projekt zu tun, weil alle Werkzeuge, die ich bisher finden konnte, ziemlich schrecklichen Code produzieren. Altova hat eine 30-tägige Probezeit, wenn Sie mir nicht glauben, versuchen Sie es. Es ist einfacher, einen Lex/Bison-Parser für meine XSD zu schreiben, als ein $ 500 Professional-Code-Paket zu verwenden, das eine schreckliche Klassendarstellung erzeugt.

Ich kann nicht glauben, dass Leute Gebrauch von XML in C++ machen, weil die Werkzeuge dafür schrecklich sind.

+0

Können Sie uns ein Beispiel zeigen, was die "schlechten Werkzeuge" produzieren und erklären, warum Sie es für schlecht halten? –

+0

Kann ich nicht beantworten, da ich hier in "Mini-Markdown Formatierung" feststecke. Ich habe Ihnen ein Beispielschema gegeben - gehen Sie voran und führen Sie den Altova XML-Spion darauf aus und vergleichen Sie das mit dem Beispiel, das mein handgerollter XSD-> C++ - lex/bison/hack erzeugt. Gehen Sie geradeaus. Ich bin nicht am wenigsten beeindruckt von den Werkzeugen zur Verfügung. XJC produziert ziemlich guten Code, aber es ist in Java, also ist es nicht für mich geeignet. Ich fühle mich, als würde ich mit Steinmessern und Bärenfellen arbeiten. – user6269400

+0

Haben Sie Altova Spion nicht ... sehen Sie Ihre vorgeschlagene Klassenstruktur und stimmen Sie zu, dass es vernünftig aussieht. Vielleicht kannst du in 1-2 Sätzen erklären, was Altova macht, was du nicht magst. –