Klistra in Dart till vänster och tryck på "Konvertera" — vi gör XML av detKlistra in Dart-kod

Vad det här verktyget gör

Om du någon gång har fått forma en XML-payload så att den matchar en Dart-modell — för en Flutter-app som pratar med en äldre SOAP-endpoint, en XML-konfig i Android-stil, eller en RSS-läsare — vet du hur mycket boilerplate det blir. Klistra in Dart här så ger verktyget tillbaka välformad XML i ett svep. En klass med final-fält, en hel modellfil, eller en ifylld instans — samma resultat: ett komplett XML-dokument där varje fält finns kvar.

Det här är inte naiv strängersättning. Konverteraren läser riktig Dart: namngivna required-parametrar blir element i deklarationsordning, final-fält beter sig likadant som icke-final, DateTime-värden renderas som ISO-8601-strängar, Duration använder ISO-8601-varaktighetsformat, num, int och double behåller sin numeriska form, null (från nullable-typer som String?) blir ett tomt element istället för att försvinna, och List<T> blir ett container-element med ett barn per post — precis vad XmlBuilder i paketet xml skulle producera.

Klassstrukturen bevaras. Varje top-level-klass blir ett rot-element uppkallat efter klassen, varje fält blir ett barn-element, nästade klasser packas upp inline, och Map<K, V> blir par av <entry><key/><value/></entry>. Annoteringar som @JsonKey(name: "x") från json_annotation respekteras som tips för att byta namn på element. Klistra in en Flutter-modell, en data class i freezed-stil, eller en vanlig Dart-POJO — XML:en ser ut som ett handskrivet XmlBuilder-anrop skulle ge, bara utan ceremonin.

Så här använder du det

Tre steg. Samma flöde oavsett om du klistrar in en enda modell eller en hel <code>lib/models</code>-mapp.

1

Klistra in din Dart (eller prova exemplet)

Släpp in din Dart som den är i den vänstra editorn. En vanlig klass, en data class med namngiven konstruktor, flera klasser, eller en ifylld instans — allt fungerar. Klicka på Ladda exempel för att först se ett realistiskt Order-exempel.

Du behöver inte ta bort importer, rensa part-direktiv eller ta bort annoteringar. Låt koden se ut precis som i din IDE. Bara klistra in.

2

Tryck Konvertera

Klicka på den gröna Konvertera-knappen. Verktyget läser Dart-koden, behåller varje klass och fält, och bygger XML i en enda runda. En kort laddningsindikator visas medan det jobbar.

3

Kopiera XML:en

Högerpanelen fylls med indenterad, välformad XML som vilken standardkonform parser som helst accepterar. Släpp in den i en SOAP-förfrågan, en Flutter-asset-fil, en Android-liknande config, eller ett enhetstest-fixture.

När det verkligen kommer till nytta

Flutter-appar som pratar med SOAP-tjänster

Din Flutter-app måste anropa en äldre SOAP-endpoint och request-body måste matcha en Dart-modell. Klistra in modellen, ta XML:en, skicka den till <code>http.post</code> eller paketet <a href="https://pub.dev/packages/xml" target="_blank" rel="noopener">xml</a>.

RSS- och Atom-flödesgeneratorer

Bygger du en podd- eller nyhetsapp som publicerar RSS? Klistra in avsnittsmodellen, få XML-formen du behöver, och paketera sedan med flödets envelope — ingen handräkning av <code>&lt;item&gt;</code>-barn.

Native Android/iOS XML-configs

Behöver du producera en preferences-XML i Android-stil eller en plist-liknande iOS-struktur från en Dart-modell som används i platform channels? Klistra in klassen och få en mall som bara behöver finjusteras.

Testfixturer för flutter_test

Gör om en ifylld modell till en XML-fixture-fil för <code>flutter_test</code>, golden-tester för widgets, eller mockade HTTP-svar — mycket snabbare än att skriva fixture-strängar för hand.

Vanliga frågor

Kan jag klistra in flera klasser samtidigt?

Ja — klistra in en hel models.dart-fil eller en komplett modellmapp. Varje top-level-klass kommer igenom med nästade klasser uppackade och fält från förälderklasser inkluderade. Mixins behandlas som att de bidrar med sina fält. Inget ryker i det tysta.

Fungerar det med freezed eller json_serializable data classes?

Ja. Oföränderliga klasser i freezed-stil och modeller annoterade med json_serializable behandlas som vanliga Dart-klasser — fälten kommer igenom, och @JsonKey(name: "x") respekteras som ett tips för att byta namn på element. Du behöver inte köra build_runner eller klistra in den genererade .g.dart-filen.

Hur hanteras DateTime, Duration, null och num?

DateTime renderas som en ISO-8601-sträng (2026-04-21T10:15:00.000Z). Duration renderas som en ISO-8601-varaktighet (PT2H30M) eller fallback HH:mm:ss. Nullable-typer med ett null-värde blir tomma element (<field/>) istället för att utelämnas, så XML-formen förblir konsekvent. num, int och double serialiseras alla som vanlig decimaltext.

Och List, Map och nästade klasser?

List<T> blir ett container-element med ett barn per post, uppkallat efter typen — en List<OrderItem> items blir <items><OrderItem/><OrderItem/></items>. Map<K, V> blir par av <entry><key/><value/></entry>. Nästade klasser packas upp inline, precis som XmlBuilder i paketet xml gör med nästade element.

Sparas min kod?

Din Dart skickas till backend för konvertering och sparas inte — vi loggar inte payloaden. Som alltid med onlineverktyg: om koden innehåller verkligt känsliga literaler (API-nycklar, tokens), rensa eller mocka dem innan du klistrar in.

Vad händer om klassen använder dynamic- eller Object?-fält?

Fält typade som dynamic eller Object? serialiseras som strängtext baserat på det tilldelade literalvärdet, eftersom den verkliga formen är känd först vid körning. Vill du ha starkare XML-output, snäva in typen (String, int, en konkret klass) — konverteraren plockar upp strukturen automatiskt.

Andra verktyg du kan behöva

Dart till XML är bara en pusselbit. De här passar bra ihop med det: