Ruby til XML-konverter
Indsæt Ruby-klasser eller -objekter. Få ren XML tilbage.
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.
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.
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.
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: