Objective-C til XML-konverter
Lim inn Objective-C-interfacer eller objekter. Få ren XML tilbake.
Det dette verktøyet gjør
Har du noen gang måttet snekre sammen en XML-payload for hånd som passer en Objective-C-modell — for en gammel SOAP-tjeneste, en plist-fil, en Cocoa-config eller en test-fixture — så kjenner du øvelsen. Du teller @property-linjer, river av typekvalifikatorer, prøver å huske hvilke som er NSArray-containere, og krysser fingrene for at formen stemmer. Lim inn Objective-C her, og du får velformet XML tilbake i ett jafs. En enslig alloc/init-snutt, en hel header-fil med flere @interface-blokker, eller en dypt nestet modell — samme resultat.
Dette er ingen naiv tekstbytting. Konverteren følger hvordan Cocoa faktisk mapper til XML. NSString-verdier blir til tekstnoder (korrekt escapet). NSNumber og NSDecimalNumber mister wrapperen og blir ren numerisk tekst — så [NSDecimalNumber decimalNumberWithString:@"249.99"] kommer ut som 249.99. BOOL-verdier blir til true / false, eller varianten YES / NO om skjemaet ditt vil ha det slik. NSArray<OrderItem *> blir et container-element med ett barn per item, oppkalt etter elementtypen — samme form som trær av NSXMLElement sender ut.
Backing via instansvariabler er også med. Bruker @property din @synthesize customerName = _customerName;, heter elementet fortsatt customerName, ikke _customerName — iVar-navnet er et implementasjonsdetalj, ikke en del av wire-formatet. Nestede objekter (en Order med en Address-@property) blir brettet ut på stedet, og nil-verdier blir tomme elementer så formen holder seg konsistent. Limer du inn flere @interface-blokker, havner alle i utdataene. Lim inn koden slik den står i .h-filen din — ingen opprydning nødvendig — og sammenlign resultatet med det NSXMLDocument ville produsert.
Slik bruker du det
Tre trinn. Funker likt uansett om du limer inn én klasse eller en hel bunke med headere.
Lim inn Objective-C-en din (eller prøv eksempelet)
Slipp Objective-C-en din i venstre editor slik den er. En @interface-blokk, en alloc/init-objektliteral, flere klasser eller nestede typer — alt går. Klikk Last eksempel for å se et realistisk Order / OrderItem / Address-eksempel først.
Du trenger ikke å fjerne @property-attributter, ta ut pragmas eller rydde i import-linjene. La koden være slik den ser ut i Xcode. Parseren kan lese en ekte .h- eller .m-fil.
Trykk Konverter
Klikk på den grønne Konverter-knappen. Verktøyet leser Objective-C-en, beholder hver @property, tar vare på nestede objekter og bygger XML-en i ett jafs. En kort lasteindikator snurrer imens.
Kopier XML-en
Høyre panel fyller seg med innrykket, velformet XML som enhver standardkompatibel parser — inkludert NSXMLParser — godtar. Kopier den inn i en plist, en SOAP-request-body, en test-fixture eller dokumentasjonen din.
Når dette virkelig hjelper
Lage plist-fixtures for iOS
Du har en Objective-C-modell og trenger en matchende Info.plist eller seed-plist. Lim inn klassen, hent ut XML-en, slipp den i bundlet — ingen håndskrevne <code><dict></code> / <code><key></code>-par.
Cocoa XML-konfigurasjonsfiler
Gamle desktop-Cocoa-apper sender fremdeles med XML-config. Gjør <code>Settings</code>-klassen din om til en klar-til-å-redigere-mal så konfigurasjonen matcher koden som leser den.
Legacy SOAP- / WCF-klienter på iOS
Snakker iOS-appen din fortsatt med et SOAP-endepunkt, kan du lime inn kontraktsklassen for requesten og få XML-envelope-bodyen — enklere enn å bygge <code>NSXMLElement</code>-trær for hånd.
Mate Mac OS XML-arbeidsflyter
Gamle AppleScript- / Automator- / XML-RPC-integrasjoner forventer XML. Lim inn Objective-C-modellen, hent XML-en, send den inn i arbeidsflyten — ingen manuell oversettelse.
Vanlige spørsmål
Kan jeg lime inn flere @interface-deklarasjoner på én gang?
Ja. Lim inn en hel header-fil. Hver @interface kommer gjennom med nestede typer brettet ut. Enten @interface-en din deklarerer ivars eksplisitt (inni { }) eller bruker den moderne bare-@property-stilen, fungerer begge likt.
Hvordan håndteres @property-attributter?
Attributter som (nonatomic, copy), (strong), (weak), (readonly) og (assign) er metadata for runtimen — de endrer ikke den serialiserte formen. Elementnavnet er navnet på propertyen. readonly-properties sendes ut likevel (de har fortsatt en verdi). Beregnede properties med egne getters behandles som en hvilken som helst annen property.
Og iVar-navning — får jeg elementer med _understrek?
Nei. Hvis propertyen din heter customerName og backing-iVar-en er _customerName, blir XML-elementet <customerName>. Understreken er en Objective-C-konvensjon, ikke et wire-format. Vil du døpe om et element, så bytt navn på selve @property og lim inn på nytt.
Hvordan behandles NSString, NSNumber, NSDecimalNumber, BOOL og NSDate?
NSString blir til en tekstnode med korrekt XML-escape. NSNumber og NSDecimalNumber mister wrapperen og blir til ren numerisk tekst. BOOL blir til true / false (eller YES / NO om kildekoden bruker plist-konvensjonen). NSDate kommer ut som en ISO-8601-streng. nil-verdier blir tomme elementer i stedet for å bli droppet.
Hva med NSArray, NSDictionary og nestede objekter?
NSArray<OrderItem *> blir et container-element med ett barn per item, oppkalt etter elementtypen: <items><OrderItem/><OrderItem/></items>. NSDictionary blir en container med <entry><key/><value/></entry>. Nestede objekter (en property hvis type er et annet @interface) brettes ut på stedet med alle felter intakte.
Blir koden min lagret?
Koden din sendes til backenden for konverteringen og blir ikke lagret — vi logger ikke payloaden. Som alltid med nettbaserte verktøy: er koden virkelig sensitiv, se over den før du limer inn.
Andre verktøy du kanskje trenger
Objective-C til XML er bare én brikke i puslespillet. Disse verktøyene passer godt sammen med det: