Skip to main content

Slik analyserer du XML-filer i Xcode

How to Export an SPSS Data File into Microsoft Excel (April 2025)

How to Export an SPSS Data File into Microsoft Excel (April 2025)
Anonim

En enkel oppgave som er ryggraden til mange apps, er muligheten til å analysere XML-filer. Og heldigvis gjør Xcode det relativt enkelt å analysere en XML-fil i Objective-C.

En XML-fil kan inneholde alt fra grunnleggende data om appen din til en RSS-feed for et nettsted. De kan også være en fin måte å oppdatere informasjon på i appen din eksternt, og dermed omgå behovet for å sende inn et nytt binært til Apple bare for å legge til et nytt element på en liste.

Så hvordan behandler vi XML-filer i Xcode? Prosessen inneholder trinn for å initialisere variablene som skal brukes, starte XML-parserprosessen, mate som behandler en fil, starten på et enkelt element, tegnene (verdien) i elementet, slutten av et enkelt element og slutten av analyseprosessen.

I dette eksemplet vil vi analysere en fil fra Internett ved å sende den en bestemt nettadresse (URL).

Vi starter med å bygge ut headerfilen. Dette er et eksempel på en svært grunnleggende headerfil for en detaljvisningskontroller med minimumskravene for å analysere filen vår:

@interface RootViewController: UITableViewController {DetailViewController * detailViewController;NSXMLParser * rssParser;NSMutableArray * artikler;NSMutableDictionary * element;NSString * currentElement;NSMutableString * ElementValue;BOOL errorParsing;}@property (nonatomic, behold) IBOutlet DetailViewController * detailViewController;- (ugyldig) parseXMLFileAtURL: (NSString *) URL;Funksjonen parseXMLFileAtURL starter prosessen for oss. Når det er ferdig, vil NSMutableArray "artikler" holde våre data. Oppsettet vil bestå av mutable ordbøker med nøkler relatert til feltnavnene i XML-filen.

Nå som vi har satt opp de nødvendige variablene, går vi videre til møtet av prosessen i .m-filen:

- (void) parserDidStartDocument: (NSXMLParser *) parser {NSLog (@ "Fil funnet og parsing startet");}

Denne funksjonen går i begynnelsen av prosessen. Det er ikke nødvendig å sette noe i denne funksjonen, men hvis du vil utføre en oppgave når filen begynner å bli analysert, er dette stedet du vil sette inn koden din.

- (ugyldig) parseXMLFileAtURL: (NSString *) URL{NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-oss) AppleWebKit / 525.27.1 (KHTML, som Gecko) Versjon / 3.2.1 Safari / 525.27.1";NSMutableURLRequest * request = NSMutableURLRequest requestWithURL:NSURL URLWithString: URL;request setValue: agentString forHTTPHeaderField: @ "User-Agent";xmlFile = NSURLConnection sendSynchronousRequest: forespørsel returResponse: null feil: null;artikler = NSMutableArray alloc init;errorParsing = NO;rssParser = NSXMLParser alloker initWithData: xmlFile;rssParser setDelegate: self;// Du må kanskje slå noen av disse avhengig av typen XML-fil du analysererrssParser setShouldProcessNamespaces: NO;rssParser setShouldReportNamespacePrefixes: NO;rssParser setShouldResolveExternalEntities: NO;rssParser parse;}

Denne funksjonen instruerer motoren til å laste ned en fil på en bestemt nettadresse (URL) og starte prosessen for å analysere den. Vi forteller den eksterne serveren at vi er Safari som kjører på Mac, bare hvis serveren forsøker å omdirigere iPhone / iPad til en mobilversjon.Alternativene på slutten er spesifikke for visse XML-filer. De fleste RSS-filer og generiske XML-filer trenger ikke dem slått på.

- (void) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {NSString * errorString = NSString stringWithFormat: @ "Feilkode% i", parseError code;NSLog (@ "Feil parsing XML:% @", errorString);errorParsing = JA;}Dette er en enkel feilsøkingsruting som vil angi en binær verdi hvis den opplever en feil. Det kan hende du trenger noe mer spesifikt her, avhengig av hva du gjør. Hvis du bare trenger å kjøre en kode etter behandling i tilfelle feil, kan den binære variabelen errorParsing bli kalt på den tiden.

- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName attributter: (NSDictionary *) attributeDict {currentElement = elementName copy;ElementValue = NSMutableString alloc init;hvis (elementnavn isEqualToString: @ "item") {item = NSMutableDictionary alloc init;}} Kjøttet i XML-parseren inneholder tre funksjoner, en som kjører i begynnelsen av et enkelt element, en som kjører under midten av analysering av elementet, og en som kjører på slutten av elementet.

For dette eksempelet vil vi analysere en fil som ligner på RSS-filer som bryter ned elementene i grupper under overskriften "elementer" i XML-filen. Ved behandlingens start kontrollerer vi elementnavnet "element" og fordeler ordlisten når en ny gruppe oppdages. Ellers initierer vi vår variabel for verdien.

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) streng {ElementValue appendString: streng;}

Dette er den enkle delen. Når vi finner tegn, legger vi dem bare til vår variabel "ElementValue".

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {hvis (elementnavn isEqualToString: @ "item") {artikler addObject: item copy;} annet {element setObject: ElementValue forKey: elementName;}}

Når vi er ferdig med å behandle et element, må vi gjøre en av to ting: (1) Hvis sluttelementet er «element», har vi fullført gruppen vår, så vi legger til vår ordbok i vårt utvalg av "artikler ". Eller (2) hvis elementet ikke er "element", setter vi verdien i ordboken med en nøkkel som samsvarer med elementets navn. (Dette betyr at vi ikke trenger en individuell variabel for hvert felt i XML-filen. Vi kan behandle dem litt mer dynamisk.)

- (void) parserDidEndDocument: (NSXMLParser *) parser {hvis (errorParsing == NO){NSLog (@ "XML-behandling gjort!");} annet {NSLog (@ "Feil oppstod under XML-behandling");}}

Dette er den siste funksjonen som trengs for vår parsingrutine. Det avsluttes bare dokumentet. Du vil legge inn noen kode du vil fullføre prosessen her eller noe spesielt du kanskje vil gjøre i tilfelle feil.

En ting mange apps kanskje vil gjøre her er å lagre dataene og / eller XML-filene til en fil på enheten. På den måten, hvis brukeren ikke er koblet til Internett neste gang de laster appen, kan de fortsatt få denne informasjonen.

Selvfølgelig kan vi ikke glemme den viktigste delen: Fortell din søknad om å analysere filen (og gi den en webadresse for å finne den på!).

For å starte prosessen må du bare legge til denne koden til riktig sted der du vil gjøre XML-behandlingen:

selv parseXMLFileAtURL: @ "http://www.webaddress.com/file.xml";