F# til XML Converter
Indsæt F#-records eller -værdier. Få ren XML tilbage.
Hvad værktøjet gør
Hvis du skriver F# og arbejder tæt på .NET XML-config, WCF-contracts eller et SOAP-endpoint, kender du allerede smerten: dine record-typer er rene og udtryksfulde, men at skrive den tilsvarende XML i hånden er en plage. Indsæt F# her, og du får velformet XML tilbage i ét hug — en enkelt record, en udfyldt let-binding, eller et helt modul med indlejrede records.
Konverteren kender de F#-særheder, du faktisk bekymrer dig om. En option<string> med Some "x" bliver et normalt element; None bliver til et tomt element i stedet for at forsvinde, så formen på din XML forbliver forudsigelig. decimal-literaler (249.99m) taber deres suffix. list, seq og arrays bliver til container-elementer med ét barn pr. item — svarende til det System.Xml.Serialization sender ud under motorhjelmen, når du round-tripper via .NET.
Discriminated unions håndteres fornuftigt — case-navnet lander som element-tag, og payloaden bliver til child-elementer. Indlejrede records foldes ud inline, tuple-felter kommer ud som søskende-elementer, og Map<K,V> bliver til <Entry><Key/><Value/></Entry>-par. For attributtstyret tilpasning ([<XmlElement>], [<XmlAttribute>]) — se F#-dokumentationen om .NET-interop. Konverteren respekterer dem, når de er til stede.
Sådan bruger du det
Tre trin. Virker ens, om du indsætter en record på én linje eller et helt modul.
Indsæt din F# (eller prøv eksemplet)
Smid F# ind som det er i venstre editor. En record type, en udfyldt let-binding, flere records, eller en discriminated union — alt går. Klik først på Indlæs eksempel for et realistisk eksempel.
Du behøver ikke fjerne open-statements eller rydde op i F#-syntaksen. Lad koden stå, som den ser ud i Rider eller VS Code. Bare indsæt.
Tryk Konverter
Klik på den grønne Konverter-knap. Værktøjet parser recordsne, går gennem den udfyldte værdi, og bygger XML'en i ét hug. En kort loading-indikator viser sig, mens det kører.
Kopier XML
Højre panel fyldes med indrykket, velformet XML, som enhver standardoverholdende parser vil acceptere. Indsæt det direkte i din app.config, en SOAP-fixture, en XmlSerializer-round-trip-test, eller din dokumentation.
Hvornår det virkelig er smart
.NET XML-konfigurationsfiler
En F#-record, der modellerer en app.config- / web.config-sektion, bliver til en redigerbar XML-skabelon — ingen mere angle-bracket-klatten i hånden.
WCF- og SOAP-fixtures
Du har en F#-record, der spejler en WCF-data-contract. Indsæt den, hent SOAP-formatteret body, smid ind i SoapUI eller Postman.
Fable-interop med legacy-XML-endpoints
Bruger du Fable til at snakke med et ældre XML-API? Indsæt den delte F#-record og få den XML-body, din backend forventer, med option-felter håndteret korrekt.
Testdata til XmlSerializer
Generer XML-seed-data, der round-tripper via <code>XmlSerializer<T></code> uden overraskelser — praktisk til integrationstests, mock-servere og regressionssuites.
Typiske spørgsmål
Kan jeg indsætte flere records på én gang?
Ja — indsæt et helt modul. Hver record type kommer igennem med indlejrede records foldet ud og typedefinitioner kædet med and håndteret. Discriminated-union-cases beholder case-navnet som element-tag.
Hvordan håndteres option, None og defaults?
En option<string> med Some "x" bliver til et normalt element, der indeholder teksten. None bliver et tomt element, så formen forbliver stabil — du mister ikke felter mellem udfyldte og tomme records. voption opfører sig på samme måde.
Hvad med decimal, DateTime, Guid og de drilske typer?
Decimaler (249.99m) taber suffikset og bliver til rent numerisk tekst. DateTime, DateTimeOffset og TimeSpan bliver til ISO-8601-strenge. Guid forbliver i det kanoniske 8-4-4-4-12 hex-format. byte[] bliver til base64-tekst — svarende til opførslen hos XmlSerializer.
Virker discriminated unions?
Ja. En DU som type Status = Active | Suspended of reason: string udsender <Active/> for det nullariske case og <Suspended><reason>...</reason></Suspended> for payload-caset. Case-navnet lander som element-tag — oftest præcis det, du vil have til XML, der matcher et skema.
Bliver min kode gemt?
Din kode sendes til backenden til konverteringen og persisteres ikke — vi logger ikke payloaden. Hvis F# er følsom (interne contracts, API-nøgler i literaler), så se over den, før du indsætter.
Hvad hvis F# bruger computation expressions eller active patterns?
De producerer ikke XML-felter — det er control-flow-konstruktioner, ikke data. Vi kigger på record-typedefinitionerne og den udfyldte instans, så et async { ... } eller et banana-clip-pattern-match ignoreres. Ret åbenlyse syntaksfejl først, så parseren har noget rent at tygge på.
Andre værktøjer du måske skal bruge
F# til XML er ét stykke. Disse spiller godt sammen med det: