Hvordan analysere XML-filer i Xcode

click fraud protection

Selv om en innebygd XML parser gir virkelig verdi til et nytt skrivebord eller en mobil applikasjon, og koding av funksjonalitet krever vanligvis mye utviklingstid og beta-testing. Apples Xcode-program inkluderer en XML-parser som omgår det meste av dette manuelle arbeidet.

An XML filen 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 i appen din eksternt, og dermed omgå behovet for å sende inn en ny binær til Apple, bare for å legge til et nytt element i en liste.

Xcode-prosessen

Den innebygde Xcode-prosessen inneholder trinn for å initialisere variablene som skal brukes, starte XML-parserprosessen, mate den prosessen med en fil, vurdere individuelle elementer og tegnene (verdien) i disse elementene, gjenkjenne slutten på et enkelt element og avslutte analyseringen prosess.

Bruk XML Parser

For å illustrere detaljene analyserer vi en eksempelfil fra internett ved å sende den en bestemt nettadresse (URL).

instagram viewer

Begynn med å bygge toppfilen. Dette er et eksempel på en veldig 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 (ikke-atomisk, beholder) IBOutlet DetailViewController * detailViewController;
- (ugyldig) parseXMLFileAtURL: (NSString *) URL;


ParseXMLFileAtURL-funksjonen starter prosessen. Når den er ferdig, inneholder NSMutableArray "artiklene" dataene. Matrisen består av foranderlige ordbøker med nøkler relatert til feltnavnene i XML-filen.

Initier deretter prosessen:

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

Denne funksjonen kjører ved starten 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 det her du legger koden din.

Instruere programmet for å laste ned noe

Deretter instruerer du programmet om å laste ned noe:

- (ugyldig) parseXMLFileAtURL: (NSString *) URL
{
NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; no-us) AppleWebKit / 525.27.1 (KHTML, som Gecko) Versjon / 3.2.1 Safari / 525.27.1 ";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[forespørsel setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: forespørsel returnResponse: null feil: null];
artikler = [[NSMutableArray alloc] init];
errorParsing = NEI;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self];
// Det kan hende du må slå på noen av disse, avhengig av hvilken type XML-fil du analyserer
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];
[rssParser parse];
}


Denne funksjonen instruerer motoren til å laste ned en fil til en bestemt nettadresse (URL) og starte prosessen for å analysere den. Vi forteller den eksterne serveren at vi er en Safari som kjører på Mac, bare i tilfelle serveren prøver å 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 at de er slått på.

Feil-sjekk resultatet

Utfør noen grunnleggende feilkontroll på resultatet:

- (ugyldig) parser: (NSXMLParser *) parser parseErrorOccured: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Feilkode% i", [parseError-kode]];
NSLog (@ "Feil under parsing av XML:% @", errorString);
errorParsing = JA;
} Denne feilkontrollrutingen setter en binær verdi hvis den støter på en feil. Du kan trenge noe mer spesifikt her, avhengig av hva du gjør. Hvis du bare trenger å kjøre litt kode etter behandling i tilfelle feil, kan


Denne feilkontrollrutinen angir en binær verdi hvis den støter på en feil. Du kan trenge noe mer spesifikt her, avhengig av hva du gjør. Hvis du bare trenger å kjøre litt kode etter behandlingen i tilfelle feil, kan feilanalyse binær variabel kalles på det tidspunktet.

Analyser hentet innhold

Deretter bryter programmet ned hentet innhold og analyserer det:

- (ugyldig) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI QualifiedName: (NSString *) qName attributter: (NSDictionary *) attributeDict {
currentElement = [elementName copy];
ElementValue = [[NSMutableString alloc] init];
hvis ([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];
}
}


Kjøttet til XML-parseren inneholder tre funksjoner, en som kjører i begynnelsen av et individ element, en som kjører midt i analyseringen av elementet, og en som kjører på slutten av element.

For dette eksemplet analyserer vi en fil som ligner på RSS-filer som deler ned elementer i grupper under overskriften gjenstander i XML-filen. Ved begynnelsen av behandlingen ser vi etter elementnavnet "element" og tildeler varelisten vår når en ny gruppe oppdages. Ellers initialiserer vi variabelen for verdien:

- (ugyldig) parser: (NSXMLParser *) parser funnetTegn: (NSString *) streng {
[ElementValue appendString: string];
}


Når vi finner tegn, legger vi dem bare til variabelen vår ElementValue:

- (ugyldig) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI kvalifisert navn: (NSString *) qName {
hvis ([elementName isEqualToString: @ "item"]) {
[artikler addObject: [elementkopi]];
} annet {
[item setObject: ElementValue forKey: elementName];
}
}

Hva som skjer når analyseringen er fullført

Når programmet er ferdig med å behandle et element, må det gjøre en av to ting:

  • Hvis sluttelementet er punkt, vi er ferdige med gruppen vår, så vi vil legge ordboken vår til vårt utvalg av artikler.
  • Hvis elementet ikke er det punkt, setter vi verdien i ordboken vår 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.)

Dette er den siste funksjonen som trengs for vår parseringsrutine; det avslutter dokumentet. Sett en endelig kode her eller spesifiser en feilretting av underrutinen:

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

Lagre dataene

En ting mange apper kanskje vil gjøre her er å lagre dataene eller XML-filen i en fil på enheten. På den måten, hvis enheten ikke er koblet til internett neste gang appen lastes inn, kan den fremdeles få tak i denne informasjonen.

Selvfølgelig kan vi ikke glemme den viktigste delen: å be applikasjonen din om å analysere filen (og gi den en nettadresse for å finne den på!). For å starte prosessen, legg til denne kodelinjen til riktig sted der du vil utføre XML-behandlingen:

 [self parseXMLFileAtURL: @ " http://www.webaddress.com/file.xml"]; 
instagram story viewer