Dart-naar-XML-converter
Plak Dart-klassen of -objecten. Krijg schone XML terug.
Wat deze tool doet
Als je ooit een XML-payload hebt moeten vormgeven zodat die paste bij een Dart-model — voor een Flutter-app die praat met een legacy SOAP-endpoint, een XML-config in Android-stijl, of een RSS-feed-reader — weet je hoeveel boilerplate dat kost. Plak het Dart hier en de tool geeft in één keer nette XML terug. Eén klasse met final-velden, een compleet modelbestand, of een gevulde instantie — de uitkomst is hetzelfde: een compleet XML-document waarin elk veld bewaard blijft.
Dit is geen naïeve string-replace. De converter leest echte Dart: benoemde required-parameters worden elementen in de volgorde waarin ze gedeclareerd zijn, final-velden gedragen zich identiek aan niet-final, DateTime-waarden worden gerenderd als ISO-8601-strings, Duration gebruikt het ISO-8601-duur-format, num, int en double behouden hun numerieke vorm, null (uit nullable-types zoals String?) wordt een leeg element in plaats van weg te vallen, en List<T> wordt een container-element met één kind per item — precies wat de XmlBuilder uit het xml-pakket zou opleveren.
De klassenstructuur blijft behouden. Elke top-level klasse wordt een root-element met de naam van de klasse, elk veld wordt een child-element, geneste klassen worden inline uitgevouwen, en Map<K, V> wordt <entry><key/><value/></entry>-paren. Annotaties zoals @JsonKey(name: "x") uit json_annotation worden gerespecteerd als hints om elementen te hernoemen. Plak een Flutter-model, een data class in freezed-stijl, of een gewone Dart-POJO — de XML ziet eruit zoals een handgeschreven XmlBuilder-aanroep zou produceren, alleen zonder het omhaal.
Hoe je het gebruikt
Drie stappen. Dezelfde flow of je nu één model plakt of een hele <code>lib/models</code>-map.
Plak je Dart (of probeer het voorbeeld)
Gooi je Dart zo in de linker editor. Een gewone klasse, een data class met benoemde constructor, meerdere klassen, of een gevulde instantie — prima. Klik op Voorbeeld laden om eerst een realistisch Order-voorbeeld te zien.
Je hoeft imports niet te verwijderen, part-directives niet weg te halen en annotaties niet te wissen. Laat de code zoals hij in je IDE staat. Gewoon plakken.
Klik Converteren
Klik op de groene Converteren-knop. De tool leest het Dart, behoudt elke klasse en elk veld, en bouwt de XML in één pass. Tijdens de run flitst er kort een laadindicator.
Kopieer de XML
Het rechter paneel vult zich met ingesprongen, welgevormde XML die elke standaard-parser accepteert. Gooi het in een SOAP-request, een Flutter-assetbestand, een config in Android-stijl, of een unit-test-fixture.
Wanneer dit echt handig is
Flutter-apps die met SOAP-services praten
Je Flutter-app moet een legacy SOAP-endpoint aanroepen en de request-body moet passen bij een Dart-model. Plak het model, pak de XML, stop ze in <code>http.post</code> of het <a href="https://pub.dev/packages/xml" target="_blank" rel="noopener">xml</a>-pakket.
RSS- en Atom-feed-generators
Bouw je een podcast- of nieuwsapp die RSS publiceert? Plak het aflevering-model, pak de XML-vorm die je nodig hebt en pak het daarna in met de feed-envelope — geen <code><item></code>-kinderen meer met de hand tellen.
Native Android/iOS XML-configs
Moet je een preferences-XML in Android-stijl of een plist-achtige iOS-structuur genereren uit een Dart-model dat in platform channels wordt gebruikt? Plak de klasse en krijg een template dat je alleen nog hoeft bij te schaven.
Testfixtures voor flutter_test
Zet een gevuld model om naar een XML-fixturebestand voor <code>flutter_test</code>, widget golden tests, of gemockte HTTP-responses — een stuk sneller dan fixture-strings handmatig typen.
Veelgestelde vragen
Mag ik meerdere klassen tegelijk plakken?
Ja — plak een heel models.dart-bestand of een complete modellenmap. Elke top-level klasse komt door met uitgevouwen geneste klassen en meegerolde velden uit parent-klassen. Mixins worden zo behandeld dat hun velden meetellen. Er wordt niets stilletjes weggelaten.
Werkt het met freezed of json_serializable data classes?
Ja. Onveranderlijke freezed-achtige klassen en modellen met json_serializable-annotaties worden als normale Dart-klassen behandeld — de velden komen door, @JsonKey(name: "x") wordt als hint om elementen te hernoemen gerespecteerd. Je hoeft build_runner niet te draaien of het gegenereerde .g.dart-bestand te plakken.
Hoe worden DateTime, Duration, null en num behandeld?
DateTime wordt gerenderd als ISO-8601-string (2026-04-21T10:15:00.000Z). Duration als ISO-8601-duur (PT2H30M) of fallback HH:mm:ss. Nullable-types met een null-waarde worden lege elementen (<field/>) in plaats van weggelaten, zodat de XML-vorm consistent blijft. num, int en double worden allemaal als gewone decimale tekst geserialiseerd.
En List, Map en geneste klassen?
List<T> wordt een container-element met één kind per item, genoemd naar het type — een List<OrderItem> items wordt <items><OrderItem/><OrderItem/></items>. Map<K, V> wordt <entry><key/><value/></entry>-paren. Geneste klassen worden inline uitgevouwen, net zoals de XmlBuilder uit het xml-pakket geneste elementen maakt.
Wordt mijn code opgeslagen?
Je Dart wordt naar de backend gestuurd voor conversie en wordt niet bewaard — we loggen de payload niet. Zoals altijd met online tools: als de code echt gevoelige literals bevat (API-sleutels, tokens), haal die eruit of vervang ze door mocks voor je plakt.
En als de klasse dynamic- of Object?-velden gebruikt?
Velden die als dynamic of Object? getypeerd zijn, worden geserialiseerd als string-tekst op basis van de toegewezen literal, want de echte vorm is pas op runtime bekend. Wil je sterkere XML-output, beperk dan het type (String, int, een concrete klasse) — de converter pikt de structuur dan vanzelf op.
Andere tools die je misschien nodig hebt
Dart naar XML is maar één puzzelstukje. Deze passen er goed bij: