C++ zu XML Konverter
C++ Structs oder Klassen einfügen. Sauberes XML zurückbekommen.
Was dieses Tool macht
Anders als C# oder Java hat C++ keinen eingebauten XML-Serialisierer. Wenn du ein XML-Payload brauchst, das zu einem Struct oder einer Klasse passt, musst du das XML entweder von Hand schreiben, pugixml einbinden, Xerces-C++ reinziehen oder es mit Expat zusammenbauen — und alles davon ist eine Menge Tipperei, bevor du auch nur einen Test laufen lassen kannst. Füg dein C++ hier ein und das Tool liefert das XML in einem Durchgang, mit jedem Feld an der richtigen Stelle.
Es liest den Code so, wie ein Mensch ihn liest. Ein struct Order { std::string orderId; std::vector<OrderItem> items; }; mit einem C++20-Designated Initializer wird zu <Order><orderId/><items><OrderItem/>...</items></Order>, mit verschachtelten Structs inline ausgerollt. std::string-Werte werden sauber escaped (die üblichen &, <, >, ", '), numerische Typen behalten ihre Literalform, und bool kommt als true / false raus, sodass der Output gegen jedes Schema sauber parst, das ein standardkonformer XML-Reader erwartet.
Container folgen der Form, die du von Hand schreiben würdest. std::vector<T>, std::array und schlichte C-Arrays werden zu einem Elternelement mit einem Kind pro Eintrag, benannt nach dem Elementtyp. std::map und std::unordered_map geben <Entry><Key/><Value/></Entry>-Paare aus. std::optional-Werte, die nullopt halten, werden zu leeren Elementen statt ganz zu verschwinden — so bleibt das Schema beim Round-Trip konsistent. Füg einen Konstruktoraufruf, ein Designated-Initializer-Literal oder einfach nur die Typdefinitionen ein; das Tool kommt mit allen drei klar.
So benutzt du es
Drei Schritte. Funktioniert, egal ob du einen einzelnen Struct einfügst oder einen ganzen Header plus eine Beispielinstanz.
C++ einfügen (oder das Beispiel ausprobieren)
Wirf beliebiges C++ in den linken Editor — eine Struct-Definition, eine Klasse mit Methoden, einen Designated Initializer oder einen Konstruktoraufruf. Du kannst #include-Header, Kommentare und using-Direktiven drin lassen; die bringen den Parser nicht aus dem Konzept.
Lieber ein sauberer Struct mit Beispielinstanz? Klick auf Beispiel laden für eine realistische Order mit verschachtelten OrderItem und Address, in der C++20-Designated-Initializer-Syntax.
Auf Konvertieren drücken
Klick auf den grünen Konvertieren-Button. Das Tool läuft durch die Typen, rollt die verschachtelten Structs aus und schreibt das XML. Während es arbeitet, läuft eine kurze Ladeanzeige — meist weniger als eine bis zwei Sekunden.
XML kopieren
Das rechte Panel füllt sich mit wohlgeformtem, eingerücktem XML. Kopier es direkt in eine SOAP-Anfrage, eine app.xml-Konfigurationsdatei, eine std::ifstream-Fixture für einen Unit-Test oder einen pugixml-load_string-Test — es ist gültig, escaped und einsatzbereit.
Wann sich das wirklich lohnt
SOAP-/Webservice-Payloads prototypisieren
Du hast einen C++-Request-Struct für einen Legacy-SOAP-Endpunkt und brauchst einen realistischen XML-Body für SoapUI oder curl. Struct einfügen, XML holen, weitermachen.
pugixml-/Xerces-Test-Fixtures anlegen
Unit-Tests für deinen XML-Loader brauchen eine Auswahl an wohlgeformten Dokumenten. Sie per Hand zu schreiben ist ätzend; sie aus echten Structs zu generieren hält die Fixtures im Gleichschritt mit den Typen, die sie testen.
Konfigurationstemplates aus Code bauen
Eine Game-Engine, ein CAD-Tool oder eine Simulation, die Settings aus XML liest, hat auf der C++-Seite meist einen Settings-Struct. Einfügen, fertiges XML-Template für den Release-Build holen — ohne handgeklopftes Boilerplate.
Brücke zu Legacy-XML-Systemen
Finanz-, Gesundheits- und Defense-Stacks reden weiterhin XML. Wenn ein neuer C++-Service eine XML-Nachricht für einen alten Consumer liefern muss, zeigt dir dieses Tool, wie die Form aussehen sollte, bevor du den eigentlichen Serialisierer anschließt.
Häufige Fragen
Kann ich eine komplette Header-Datei mit mehreren Structs einfügen?
Ja. Füg den ganzen Header ein — jedes struct oder class kommt durch, verschachtelte Typen werden inline ausgerollt, und geerbte public Member aus Basisklassen werden mit reingezogen. Der Parser ist nachsichtig mit Kommentaren, Präprozessor-Direktiven und Forward-Deklarationen.
Versteht es C++20-Designated Initializer?
Ja. Order order{ .orderId = "ORD-4821", .items = { ... } }; wird Feld für Feld geparst, das XML behält also die Namen, die du geschrieben hast. Ältere Aggregatinitialisierung (positional Order{ "ORD-4821", ... }) funktioniert ebenfalls, wenn die Struct-Definition im selben Paste steht — das Tool kann Positionen dann Feldnamen zuordnen. Siehe cppreference Aggregate Initialization.
Wie behandelt es std::vector, std::map und std::optional?
std::vector<T>, std::array und schlichte C-Arrays werden zu einem Container-Element mit einem Kind pro Eintrag, benannt nach dem Elementtyp. std::map / std::unordered_map geben <Entry><Key/><Value/></Entry>-Paare aus. std::optional mit nullopt wird zu einem leeren Element, statt weggelassen zu werden, sodass das Element im Schema erhalten bleibt.
Warum nicht einfach pugixml oder libxml2 nehmen?
Die sind super für Laufzeit-Serialisierung, aber die erste Fixture zu schreiben — oder ein Konfig-Template oder ein Doku-Beispiel — heißt immer noch, den XML-Baum von Hand zu tippen. Dieses Tool spart dir diese erste Tipperei. Du kannst den Output danach jederzeit durch pugixml, Xerces-C++ oder RapidXML schicken.
Wird mein Code gespeichert?
Dein Code wird zur Konvertierung ans Backend geschickt und nicht persistiert — wir loggen das Payload nicht. Wenn der Code wirklich sensibel ist (proprietäre Game-Engine-Internals, Trading-Modelle etc.), schau ihn vor dem Einfügen durch, wie du das bei jedem Online-Tool tun würdest.
Was ist mit Templates, Pointern oder Smart Pointern?
Konkrete Template-Instanziierungen wie std::vector<int> laufen direkt. Unaufgelöste Template-Parameter (template<typename T> ohne konkretes T) werden als leere Elemente ausgegeben — wähl einen konkreten Typ, wenn du echte Daten willst. Rohen Pointern und std::unique_ptr/std::shared_ptr folgt es bis zum Pointee; ein Null-Pointer wird zum leeren Element, statt die ganze Konvertierung zu sprengen.
Andere Tools, die du brauchen könntest
C++ zu XML ist nur ein Puzzlestück. Diese Tools passen gut dazu: