Indsæt Ruby til venstre og klik "Konverter" — vi laver det om til XMLIndsæt Ruby-kode

Hvad værktøjet gør

Hvis du nogensinde har skullet håndpille en XML-payload sammen, så den matcher en Ruby-klasse — måske til en Rails-to_xml-fixture, et gammelt SOAP-kald eller en Nokogiri Builder-skabelon — så ved du, hvor hurtigt boilerplate-koden hober sig op. Indsæt Ruby her, så giver værktøjet dig velformet XML retur i ét hug. Én attr_accessor-klasse, en Struct.new, en hel modelfil eller dybt indlejrede objekter — samme resultat: et komplet XML-dokument med hvert felt bevaret.

Det er ikke bare string-erstatning. Konverteren forstår, hvordan Ruby-værdier faktisk serialiseres: BigDecimal("49.99") kommer ud som en almindelig numerisk streng (ingen videnskabelig notation), Time og DateTime renderes som ISO-8601-strenge, Symbol-værdier mister det indledende kolon, nil bliver til et tomt element i stedet for at blive smidt væk, og arrays bliver til container-elementer med ét barn per post — præcis det, Nokogiri::XML::Builder og Rails to_xml plejer at producere.

Klassestrukturen bliver også respekteret. Hver top-level-klasse bliver til et rodelement opkaldt efter klassen (i snake_case), attr_accessor-symboler bliver til barn-elementer, indlejrede objekter foldes ud inline, og arrays af OrderItem omdannes til en <items>-wrapper med ét <order_item>-barn per post. Hashes bliver til nøgle/værdi-barnelementer. Nedarvede attributter kommer også med. Hvis du indsætter en Rails-model eller et almindeligt PORO, ligner resultatet det, du ville få fra render xml: eller REXML::Document.new (se REXML) — bare uden alt ceremonielet.

Sådan bruger du det

Tre trin. Samme flow, uanset om du indsætter en enkelt Struct eller en hel lib-mappe.

1

Indsæt din Ruby (eller prøv eksemplet)

Smid din Ruby som den er ind i editoren til venstre. En attr_accessor-klasse, en Struct.new-genvej, flere klasser eller en udfyldt instans — alt går an. Klik Indlæs eksempel for først at se et realistisk Order-eksempel.

Du behøver ikke fjerne require-linjer, skrælle moduler af eller simplificere syntaksen. Lad koden være, som den ser ud i din editor. Indsæt bare.

2

Tryk Konverter

Klik på den grønne Konverter-knap. Værktøjet læser Ruby-koden, beholder hver klasse og hvert attribut, og bygger XML'en i ét hug. Der er et kort shimmer, mens det arbejder.

3

Kopier XML'en

Højre panel fyldes med indrykket, velformet XML, som enhver standard-kompatibel parser tager imod. Smid det i en SOAP-forespørgsel, en fixture-fil til RSpec, en Rails-integrationstest eller din API-dokumentation.

Hvornår det reelt redder dagen

Bygge Nokogiri- eller Builder-fixtures

Du har en Ruby-klasse og skal bruge en XML-skabelon til Nokogiri::XML::Builder eller en ERB-skabelon. Indsæt klassen, tag XML'en, smid den ind i din Builder-blok — færdig.

Rails to_xml-seed-data

En ActiveRecord-model eller PORO med 20 attributter bliver til en redigeringsklar XML-seed-fil — enten til dine integrationstest eller til et eksternt system, der stadig vil have XML.

Legacy SOAP-integrationer

En Ruby-klient, der taler med en gammel SOAP/XML-RPC-service, skal bruge en request body, der matcher en Ruby-klasse. Indsæt modellen, få formen på XML-enveloppen, og stop med at slås med <a href="https://www.ruby-doc.org/" target="_blank" rel="noopener">Savon</a>-skabeloner.

Holde dokumentation og kode i sync

Generér XML-svar-eksempler til en README, en API-reference eller XSD-baseret dokumentation direkte fra de rigtige Ruby-modeller, så dokumentationen aldrig driver væk fra koden.

Ofte stillede spørgsmål

Kan jeg indsætte flere klasser på én gang?

Ja — indsæt gerne en hel lib-fil. Hver top-level-klasse kommer ud med indlejrede klasser foldet ud og superklasse-attributter inkluderet. Mixins bliver behandlet, som om de bidrager med deres attr_accessor. Intet bliver smidt væk i stilhed.

Virker Struct.new-genvejen?

Ja. Order = Struct.new(:order_id, :customer_name, :total_amount) behandles som en klasse med tilsvarende attr_accessor. Keyword-style structs (Struct.new(:a, keyword_init: true)) virker også — den resulterende XML er identisk i begge tilfælde.

Hvordan håndteres BigDecimal, Time, Symbol og nil?

BigDecimal("49.99") bliver til den almindelige streng 49.99 (ingen videnskabelig notation, intet bd-mærke til sidst). Time, DateTime og Date renderes som ISO-8601-strenge. Symbol-værdier mister kolonet og bliver til almindelig tekst. nil bliver til et tomt element (<field/>) i stedet for at forsvinde, så XML-formen forbliver konsistent.

Hvad med arrays, hashes og indlejrede objekter?

Arrays bliver til container-elementer — items = [OrderItem.new, OrderItem.new] bliver til <items><order_item/><order_item/></items>, ét barn per post, opkaldt efter element-klassen. Hashes bliver til <entry><key/><value/></entry>-par. Indlejrede objekter foldes ud inline som barn-elementer, præcis som Rails to_xml gør det.

Bliver min kode gemt?

Din kode sendes til backenden til konvertering og bliver ikke gemt — vi logger ikke payloaden. Som altid med online-værktøjer: hvis Ruby-koden indeholder virkelig følsomme literaler (API-nøgler, kunde-PII), så fjern dem, før du indsætter.

Hvad nu hvis koden bruger metaprogrammering eller define_method?

Alt, der kun findes i runtime (metoder tilføjet via define_method, attributter sat via method_missing, inmixede moduler med beregnede attr), kan ikke udledes af statisk kode alene. Værktøjet læser erklærede attr_accessor, attr_reader, Struct-felter og eksplicitte tildelinger. Hvis et felt kun dukker op via metaprogrammering, så angiv det som en attr_accessor, så konverteren kan se det.

Andre værktøjer du måske skal bruge

Ruby til XML er ét stykke af puslespillet. Disse passer godt sammen med det: