Kako raščlaniti XML datoteke u Xcodeu

click fraud protection

Iako ugrađena XML parser dodaje stvarnu vrijednost novoj radnoj površini ili mobilnoj aplikaciji, kodiranje te funkcionalnosti obično zahtijeva puno vremena za razvoj i beta testiranje. Appleov program Xcode uključuje XML parser koji zaobilazi većinu ovog ručnog rada.

An XML datoteka može sadržavati sve, od osnovnih podataka o vašoj aplikaciji do datoteke RSS feed za web stranicu. Oni također mogu biti izvrstan način ažuriranja podataka u vašoj aplikaciji na daljinu, zaobilazeći tako potrebu da se Appleu preda novi binarni obrazac jednostavno radi dodavanja nove stavke na popis.

Proces Xcode

Ugrađeni Xcode postupak sadrži korake za inicijalizaciju varijabli koje će se koristiti, pokretanje XML procesa parsera, dodavanje tog procesa datoteci, procjena pojedinih elemenata i znakova (vrijednosti) unutar tih elemenata, prepoznavanje kraja pojedinog elementa i završavanje raščlanjivanja postupak.

Upotrijebite XML Parser

Da bismo ilustrirali detalje, analizirat ćemo primjer datoteke s interneta tako što ćemo joj poslati određenu web adresu (URL).

instagram viewer

Počnite s izgradnjom datoteke zaglavlja. Ovo je primjer vrlo osnovne datoteke zaglavlja za Detail View Controller s minimalnim zahtjevima za raščlanjivanje naše datoteke:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;
NSXMLParser * rssParser;
Članci NSMutableArray *;
NSMutableDictionary * stavka;
NSString * currentElement;
NSMutableString * ElementValue;
Pogreška BOOLParsiranje;
}
@property (nonatomic, retain) IBOutlet DetailViewController * detailViewController;
- (void) parseXMLFileAtURL: (NSString *) URL;


Funkcija parseXMLFileAtURL započinje postupak. Kada završi, NSMutableArray "članci" sadrže podatke. Niz se sastoji od promjenjivih rječnika s ključevima povezanim s imenima polja u XML datoteci.

Zatim pokrenite postupak:

- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Datoteka pronađena i započelo je raščlanjivanje");
}

Ova se funkcija pokreće na početku postupka. U ovu funkciju nije potrebno ništa stavljati, ali ako želite izvršiti zadatak kada se datoteka počne raščlanjivati, ovdje biste stavili svoj kôd.

Uputite program da nešto preuzme

Dalje, naložite programu da nešto preuzme:

- (void) parseXMLFileAtURL: (NSString *) URL
{
NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; hr-nas) AppleWebKit / 525.27.1 (KHTML, poput Gecko) Verzija / 3.2.1 Safari / 525.27.1 ";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[zahtjev setValue: agentString zaHTTPHeaderField: @ "Korisnički agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: zahtjev za vraćanjeResponse: pogreška nula: nil];
članci = [[NSMutableArray alloc] init];
errorParsing = NE;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self];
// Možda ćete trebati neke od njih uključiti, ovisno o vrsti XML datoteke koju raščlanjujete
[rssParser setShouldProcessNamespaces: NE];
[rssParser setShouldReportNamespacePrefixes: NE];
[rssParser setShouldResolveExternalEntities: NE];
[rssParser parse];
}


Ova funkcija upućuje motor da preuzme datoteku na određenu web adresu (URL) i započne postupak raščlanjivanja. Udaljenom poslužitelju govorimo da smo Safari pokrenut na Macu samo u slučaju da poslužitelj pokuša iPhone / iPad preusmjeriti na mobilnu verziju.

Opcije na kraju specifične su za određene XML datoteke. Većini RSS datoteka i generičkih XML datoteka neće biti potrebne.

Pogreška - provjerite rezultat

Izvršite osnovnu provjeru pogrešaka na rezultatu:

- (void) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Kôd pogreške% i", [parseError code]];
NSLog (@ "Greška pri raščlanjivanju XML-a:% @", errorString);
errorParsing = DA;
} Ovo usmjeravanje provjere pogrešaka postavlja binarnu vrijednost ako naiđe na pogrešku. Ovdje će vam možda trebati nešto konkretnije, ovisno o tome što radite. Ako jednostavno trebate pokrenuti neki kôd nakon obrade u slučaju pogreške,


Ova rutina provjere pogrešaka postavlja binarnu vrijednost ako naiđe na pogrešku. Ovdje će vam možda trebati nešto konkretnije, ovisno o tome što radite. Ako jednostavno trebate pokrenuti neki kôd nakon obrade u slučaju pogreške, tada se može nazvati binarna varijabla raščlanjivanja pogreške.

Analizirajte dohvaćeni sadržaj

Dalje, program raščlanjuje dohvaćeni sadržaj i analizira ga:

- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualiNName: (NSString *) qName attributes: (NSDictionary *) attributeDict {
currentElement = [copyName copy];
ElementValue = [[NSMutableString alloc] init];
if ([elementName isEqualToString: @ "item"]) {
stavka = [[NSMutableDictionary alloc] init];
}
}


Meso XML parsera sadrži tri funkcije, jednu koja se pokreće na početku pojedinca element, jedan koji se izvodi tijekom sredine raščlanjivanja elementa i jedan koji se izvodi na kraju element.

U ovom ćemo primjeru raščlaniti datoteku sličnu RSS datotekama koje raščlanjuju elemente u skupine pod naslovom predmeta unutar XML datoteke. Na početku obrade provjeravamo da li postoji naziv elementa "item" i dodjeljujemo naš rječnik predmeta kada se otkrije nova grupa. U suprotnom, inicijaliziramo našu varijablu za vrijednost:

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) string {
[ElementValue appendString: string];
}


Kada pronađemo znakove, jednostavno ih dodamo svojoj varijabli Vrijednost elementa:

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString * )paceURI qualiName: (NSString *) qName {
if ([elementName isEqualToString: @ "item"]) {
[članci addObject: [kopija predmeta]];
} ostalo {
[stavka setObject: ElementValue forKey: elementName];
}
}

Što se događa kada je raščlanjivanje završeno

Kada program završi s obradom elementa, mora učiniti jednu od dvije stvari:

  • Ako je krajnji element artikal, Završili smo našu grupu, pa ćemo dodati naš rječnik u niz članaka.
  • Ako element nije artikal, vrijednost ćemo u našem rječniku postaviti ključem koji odgovara imenu elementa. (To znači da nam nije potrebna pojedinačna varijabla za svako polje u XML datoteci. Možemo ih obraditi malo dinamičnije.)

Ovo je zadnja funkcija potrebna za našu rutinu raščlanjivanja; završava dokument. Ovdje stavite bilo koji konačni kod ili navedite potprogram za ispravljanje pogrešaka:

- (void) parserDidEndDocument: (NSXMLParser *) parser {
ako (errorParsing == NE)
{
NSLog (@ "XML obrada gotova!");
} ostalo {
NSLog (@ "Došlo je do pogreške tijekom obrade XML-a");
}
}

Spremite podatke

Mnogo aplikacija ovdje bi možda htjelo napraviti spremanje podataka ili XML datoteke u datoteku na uređaju. Na taj način, ako uređaj ne bude povezan s internetom sljedeći put kada se aplikacija učita, i dalje će moći dobiti ove informacije.

Naravno, ne možemo zaboraviti najvažniji dio: reći aplikaciji da raščlani datoteku (i dati joj web adresu na kojoj će je pronaći!). Da biste započeli postupak, dodajte ovaj redak koda na odgovarajuće mjesto na kojem želite obaviti XML obradu:

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