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
Klingt mir wie CodeSynthesis ist genau das, was Sie suchen. Es ist Open Source und C++.
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.
Es gibt ein Microsoft-Tool, das dies, glaube ich, genannt xsd.exe (aber ich habe es selbst nicht versucht).
ist auch eine Option.
Objective Systems, Inc. XBinder XML Schema Compiler (nicht nur für C++).
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.
Scheint die gleiche Lizenzbeschränkung zu haben wie der CodeSynthesis-Generator. –
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
Bitte beachten Sie, dass das Tool nicht von Google ist, sondern nur bei Google Code gehostet wird. – Beginner
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.
Können Sie uns ein Beispiel zeigen, was die "schlechten Werkzeuge" produzieren und erklären, warum Sie es für schlecht halten? –
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
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. –
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