Plak F# links en klik op "Converteren" — wij maken er XML vanPlak F#-code

Wat deze tool doet

Als je F# schrijft en ergens in de buurt van .NET XML config, WCF-contracten of een SOAP-endpoint werkt, ken je de pijn al: je record-types zijn netjes en expressief, maar het bijpassende XML met de hand kloppen is een marteling. Plak de F# hier en je krijgt in één keer welgevormd XML terug — één record, een gevulde let-binding, of een hele module met geneste records.

De converter kent de F#-eigenaardigheden die je echt boeien. Een option<string> met Some "x" wordt een normaal element; None wordt een leeg element in plaats van dat het wegvalt, zodat de vorm van je XML voorspelbaar blijft. decimal-literals (249.99m) verliezen het suffix. list, seq en arrays worden container-elementen met één kind per item — passend bij wat System.Xml.Serialization onder de motorkap uitspuugt als je via .NET round-tript.

Discriminated unions worden met gezond verstand behandeld — de case-naam wordt de element-tag en de payload wordt child-elementen. Geneste records worden inline uitgevouwen, tuple-velden komen als sibling-elementen door, en Map<K,V> wordt <Entry><Key/><Value/></Entry>-paren. Voor attribuut-gestuurde aanpassing ([<XmlElement>], [<XmlAttribute>]) zie de F#-docs over .NET-interop — de converter respecteert ze als ze aanwezig zijn.

Zo gebruik je het

Drie stappen. Werkt hetzelfde of je nu een record van één regel plakt of een hele module.

1

Plak je F# (of probeer het voorbeeld)

Drop je F# zoals het is in de linker editor. Een record type, een gevulde let-binding, meerdere records, of een discriminated union — allemaal prima. Klik eerst op Voorbeeld laden voor een realistisch geval.

Je hoeft de open-statements niet te verwijderen of de F#-syntax op te schonen. Laat de code staan zoals hij er in Rider of VS Code uitziet. Gewoon plakken.

2

Klik op Converteren

Klik op de groene Converteren-knop. De tool parset de records, loopt door de gevulde waarde, en bouwt de XML in één pass. Tijdens het draaien zie je kort een loading indicator.

3

Kopieer de XML

Het rechterpaneel vult zich met ingesprongen, welgevormde XML die elke standaardconforme parser accepteert. Plak het direct in je app.config, een SOAP-fixture, een XmlSerializer-round-trip-test, of je documentatie.

Wanneer dit echt van pas komt

.NET XML-configbestanden

Een F#-record dat een sectie van app.config / web.config modelleert, wordt een bewerkbare XML-template — geen angle brackets meer met de hand schrijven.

WCF- en SOAP-fixtures

Je hebt een F#-record dat een WCF-data-contract spiegelt. Plak het, pak de SOAP-geformatteerde body, zet hem in SoapUI of Postman.

Fable-interop met legacy XML-endpoints

Praat je via Fable met een oudere XML API? Plak het gedeelde F#-record en je krijgt de XML-body die je backend verwacht, met de option-velden correct afgehandeld.

Testdata voor XmlSerializer

Genereer XML-seed-data die zonder verrassingen round-tript via <code>XmlSerializer&lt;T&gt;</code> — handig voor integratietests, mock-servers en regressie-suites.

Veelgestelde vragen

Kan ik meerdere records tegelijk plakken?

Ja — plak een hele module. Elk record type komt door met geneste records uitgevouwen en met and aaneengeregen typedefinities netjes verwerkt. Discriminated-union-cases behouden de case-naam als element-tag.

Hoe gaat hij om met option, None en defaults?

Een option<string> met Some "x" wordt een normaal element met de tekst erin. None wordt een leeg element, zodat de vorm stabiel blijft — je verliest geen velden tussen gevulde en niet-gevulde records. voption gedraagt zich hetzelfde.

En decimal, DateTime, Guid en de lastige types?

Decimals (249.99m) verliezen het suffix en worden gewone numerieke tekst. DateTime, DateTimeOffset en TimeSpan worden ISO-8601-strings. Guid blijft in het canonieke 8-4-4-4-12 hex-formaat. byte[] wordt base64-tekst — passend bij het gedrag van XmlSerializer.

Werken discriminated unions?

Ja. Een DU als type Status = Active | Suspended of reason: string levert <Active/> voor de nullaire case en <Suspended><reason>...</reason></Suspended> voor de payload-case. De case-naam wordt de element-tag — meestal is dat precies wat je wilt voor XML dat bij een schema past.

Wordt mijn code bewaard?

Je code wordt naar de backend gestuurd voor de conversie en niet persistent opgeslagen — we loggen de payload niet. Als de F# gevoelig is (interne contracten, API-keys in literals), kijk er dan even overheen voordat je plakt.

Wat als de F# computation expressions of active patterns gebruikt?

Die produceren geen XML-velden — het zijn control-flow-constructies, geen data. We kijken naar de record-typedefinities en de gevulde instance, dus een async { ... } of een banana-clip pattern-match wordt genegeerd. Fix eerst de duidelijke syntaxfouten, zodat de parser iets schoon heeft om op te kauwen.

Andere tools die je misschien nodig hebt

F# naar XML is één puzzelstuk. Deze passen er goed bij: