C++ naar XML Converter
Plak C++ structs of classes. Krijg schone XML terug.
Wat deze tool doet
Anders dan C# of Java heeft C++ geen ingebouwde XML-serializer. Als je een XML-payload nodig hebt die matcht met een struct of class, schrijf je de XML zelf, knoop je pugixml erin, haal je Xerces-C++ erbij of bouw je het op met Expat — en dat is allemaal veel typewerk voordat je überhaupt een test kunt draaien. Plak je C++ hier en de tool levert de XML in één keer, met elk veld op de juiste plek.
Hij leest de code zoals een mens dat doet. Een struct Order { std::string orderId; std::vector<OrderItem> items; }; met een C++20 designated initializer wordt <Order><orderId/><items><OrderItem/>...</items></Order>, met geneste structs inline uitgerold. std::string-waarden worden netjes geëscaped (de gebruikelijke &, <, >, ", '), numerieke types houden hun letterlijke vorm, en bool komt eruit als true / false, zodat de output netjes parset tegen elk schema dat een standaard-conforme XML-reader verwacht.
Containers volgen de vorm die je zelf zou typen. std::vector<T>, std::array en gewone C-arrays worden een ouderlement met één kind per item, genoemd naar het elementtype. std::map en std::unordered_map geven <Entry><Key/><Value/></Entry>-paren. std::optional-waarden die nullopt bevatten worden lege elementen in plaats van te verdwijnen — zo blijft het schema consistent tijdens de round-trip. Plak een constructor-call, een designated-initializer-literal of alleen de typedefinities; de tool handelt alle drie af.
Hoe je hem gebruikt
Drie stappen. Werkt of je nu een enkel struct plakt of een complete header plus een voorbeeldinstantie.
Plak je C++ (of probeer het voorbeeld)
Gooi wat dan ook aan C++ in de editor links — een struct-definitie, een class met methodes, een designated initializer of een constructor-call. Je mag #include-headers, commentaar en using-directives erin laten; die brengen de parser niet van zijn stuk.
Liever een schone struct met een voorbeeldinstantie? Klik op Voorbeeld laden voor een realistische Order met geneste OrderItem en Address, in de C++20-designated-initializer-syntax.
Druk op Converteren
Klik op de groene Converteren-knop. De tool loopt door de types, rolt geneste structs uit en schrijft de XML. Tijdens het werk verschijnt kort een laadindicator — meestal minder dan één of twee seconden.
Kopieer de XML
Het rechterpaneel vult zich met welgevormde, ingesprongen XML. Kopieer direct in een SOAP-request, een app.xml-configbestand, een std::ifstream-fixture voor een unittest, of een pugixml-load_string-test — geldig, geëscaped en klaar voor gebruik.
Wanneer dit echt uitkomt
Prototypen van SOAP-/webservice-payloads
Je hebt een C++-request-struct voor een legacy SOAP-endpoint en je hebt een realistisch XML-body nodig om in SoapUI of curl te droppen. Struct plakken, XML pakken, door met de rest.
Testfixtures voor pugixml / Xerces seeden
Unittests voor je XML-loader hebben een variëteit aan welgevormde documenten nodig. Ze met de hand schrijven is saai; ze uit echte structs genereren houdt de fixtures in sync met de types die ze testen.
Configtemplates uit code bouwen
Een game-engine, CAD-tool of simulatie die instellingen uit XML leest heeft meestal een Settings-struct aan de C++-kant. Plakken, klaar-om-te-bewerken XML-template voor de release pakken — geen handgeklopt boilerplate.
Bruggen naar legacy XML-systemen
Financiële, zorg- en defensiestacks spreken nog steeds XML. Als een nieuwe C++-service een XML-bericht moet uitsturen naar een oude consumer, laat deze tool zien hoe de vorm eruit zou moeten zien voordat je de echte serializer aansluit.
Veelgestelde vragen
Kan ik een compleet headerbestand met meerdere structs plakken?
Ja. Plak de hele header — elke struct of class komt erdoor, geneste types worden inline uitgerold en overerfde public members van base classes worden meegenomen. De parser is niet kieskeurig met commentaar, preprocessor-directives en forward declarations.
Snapt hij C++20 designated initializers?
Ja. Order order{ .orderId = "ORD-4821", .items = { ... } }; wordt veld voor veld geparset, dus de XML houdt de namen die je hebt geschreven. Oude aggregate-initialization (positioneel Order{ "ORD-4821", ... }) werkt ook wanneer de structdefinitie in dezelfde paste staat — de tool koppelt dan posities aan veldnamen. Zie aggregate initialization op cppreference.
Hoe gaat hij om met std::vector, std::map en std::optional?
std::vector<T>, std::array en gewone C-arrays worden een container-element met één kind per item, genoemd naar het elementtype. std::map / std::unordered_map geven <Entry><Key/><Value/></Entry>-paren. Een std::optional met nullopt wordt een leeg element in plaats van weg te vallen, dus het element blijft aanwezig in het schema.
Waarom niet gewoon pugixml of libxml2 gebruiken?
Die zijn prima voor runtime-serialisatie, maar de eerste fixture schrijven — of een configtemplate, of een docs-voorbeeld — betekent nog steeds de XML-boom uittypen. Deze tool scheelt je die eerste ronde typen. De output kun je daarna altijd nog door pugixml, Xerces-C++ of RapidXML halen.
Wordt mijn code opgeslagen?
Je code wordt naar de backend gestuurd voor de conversie en niet bewaard — wij loggen de payload niet. Als de code echt gevoelig is (proprietary game-engine-internals, trading-modellen, etc.), kijk hem dan even door voordat je plakt, zoals je met elke online tool zou doen.
Wat als het C++ templates, pointers of smart pointers heeft?
Concrete template-instantiaties zoals std::vector<int> werken meteen. Niet-opgeloste template-parameters (template<typename T> zonder concrete T) worden als lege elementen uitgestuurd — kies een concreet type als je echte data wilt. Rauwe pointers en std::unique_ptr/std::shared_ptr worden gevolgd naar het pointee; een null-pointer wordt een leeg element in plaats van de hele conversie te laten falen.
Andere tools die je kunt gebruiken
C++ naar XML is maar één stukje van de puzzel. Deze tools passen er goed bij: