Kako razčleniti datoteke XML v Xcodeu

click fraud protection

Čeprav vgrajena XML parser doda resnično vrednost novi namizni ali mobilni aplikaciji, saj kodiranje te funkcije običajno zahteva veliko razvojnega časa in beta testiranja. Appleov program Xcode vključuje razčlenjevalnik XML, ki zaobide večino tega ročnega dela.

An XML datoteka lahko vsebuje vse od osnovnih podatkov o vaši aplikaciji do datoteke Vir RSS za spletno mesto. Lahko so tudi odličen način za oddaljeno posodabljanje informacij v vaši aplikaciji, s čimer se izogne ​​potrebi, da Appleu pošljete novo binarno datoteko, da preprosto dodate nov element na seznam.

Proces Xcode

Vgrajeni postopek Xcode vsebuje korake za inicializacijo spremenljivk, ki se uporabljajo, zagon postopka razčlenjevalnika XML, podajanje tega procesa v datoteko, ocenjevanje posameznih elementov in znakov (vrednosti) znotraj teh elementov, prepoznavanje konca posameznega elementa in zaključek razčlenjevanja proces.

Uporabite razčlenjevalnik XML

Za ponazoritev podrobnosti bomo analizirali primer datoteke iz interneta, tako da ji bomo posredovali določen spletni naslov (URL).

instagram viewer

Začnite z gradnjo datoteke glave. To je primer zelo osnovne datoteke glave za krmilnik podrobnega pogleda z minimalnimi zahtevami za razčlenjevanje naše datoteke:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;
NSXMLParser * rssParser;
Članki NSMutableArray *;
NSMutableDictionary * element;
NSString * currentElement;
NSMutableString * ElementValue;
Napaka BOOLParziranje;
}
@property (nonatomic, retain) IBOutlet DetailViewController * detailViewController;
- (void) parseXMLFileAtURL: (NSString *) URL;


Funkcija parseXMLFileAtURL zažene postopek. Ko konča, "članki" NSMutableArray hranijo podatke. Niz je sestavljen iz spremenljivih slovarjev s ključi, povezanimi z imeni polj v datoteki XML.

Nato postopek inicializirajte:

- (void) parserDidStartDocument: (NSXMLParser *) razčlenjevalnik {
NSLog (@ "Datoteka najdena in razčlenitev je začeta");
}

Ta funkcija se zažene na začetku postopka. V to funkcijo ni treba ničesar vnašati, če pa želite opraviti nalogo, ko se datoteka začne razčlenjevati, boste tu postavili kodo.

Naročite programu, da nekaj prenese

Nato naročite programu, naj nekaj prenese:

- (void) parseXMLFileAtURL: (NSString *) URL
{
NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; sl-nas) AppleWebKit / 525.27.1 (KHTML, kot Gecko) Različica / 3.2.1 Safari / 525.27.1 ";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[zahteva setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: zahteva vrnitevResponse: napaka nič: nič];
članki = [[NSMutableArray alloc] init];
errorParsing = NE;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self];
// Nekatere od njih boste morda morali vklopiti, odvisno od vrste datoteke XML, ki jo razčlenjujete
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NE];
[razčlenitev rssParser];
}


Ta funkcija naroči motorju, da prenese datoteko na določen spletni naslov (URL) in začne postopek razčlenjevanja. Oddaljenemu strežniku sporočamo, da smo Safari, ki deluje na Macu, samo v primeru, da strežnik iPhone / iPad preusmeri na mobilno različico.

Možnosti na koncu so specifične za določene datoteke XML. Za večino datotek RSS in splošnih datotek XML jih ne bo treba vklopiti.

Napaka - preverite rezultat

Opravite nekaj osnovnih preverjanj napak na rezultatu:

- (void) razčlenjevalnik: (NSXMLParser *) razčlenjevalnik parseErrorOccurred: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Koda napake% i", [parseError code]];
NSLog (@ "Napaka pri razčlenjevanju XML:% @", errorString);
errorParsing = DA;
} To usmerjanje preverjanja napak nastavi binarno vrednost, če naleti na napako. Tu boste morda potrebovali kaj bolj natančnega, odvisno od tega, kaj počnete. Če morate po obdelavi v primeru napake preprosto zagnati nekaj kode, se


Ta rutina preverjanja napak nastavi binarno vrednost, če naleti na napako. Tu boste morda potrebovali kaj bolj natančnega, odvisno od tega, kaj počnete. Če morate po obdelavi v primeru napake preprosto zagnati nekaj kode, lahko takrat pokličete binarno spremenljivko razčlenjevanja napak.

Analizirajte pridobljeno vsebino

Nato program razdeli pridobljeno vsebino in jo analizira:

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


Meso razčlenjevalnika XML vsebuje tri funkcije, eno, ki se izvaja na začetku posameznika element, ki se izvaja med razčlenjevanjem elementa, in tisti, ki se izvaja na koncu elementa element.

V tem primeru bomo razčlenili datoteko, podobno datotekam RSS, ki razčlenjujejo elemente na skupine pod naslovom predmetov v datoteki XML. Na začetku obdelave preverjamo ime elementa "item" in dodeljujemo naš slovar elementov, ko zaznamo novo skupino. V nasprotnem primeru inicializiramo svojo spremenljivko za vrednost:

- (void) razčlenjevalnik: (NSXMLParser *) najden razčlenjevalnik Znaki: (NSString *) string {
[ElementValue appendString: niz];
}


Ko najdemo znake, jih preprosto dodamo svoji spremenljivki ElementValue:

- (void) razčlenjevalnik: (NSXMLParser *) razčlenjevalnik didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualiNName: (NSString *) qName {
if ([elementName isEqualToString: @ "item"]) {
[članki addObject: [kopija predmeta]];
} še {
[element setObject: ElementValue forKey: elementName];
}
}

Kaj se zgodi, ko je razčlenjevanje končano

Ko program konča obdelavo elementa, mora narediti eno od dveh stvari:

  • Če je končni element elementsmo zaključili svojo skupino, zato bomo v našo paleto člankov dodali svoj slovar.
  • Če element ni element, bomo vrednost v našem slovarju nastavili s ključem, ki se ujema z imenom elementa. (To pomeni, da za vsako polje v datoteki XML ne potrebujemo posamezne spremenljivke. Lahko jih obdelamo nekoliko bolj dinamično.)

To je zadnja funkcija, potrebna za našo rutino razčlenjevanja; konča dokument. Sem vnesite katero koli končno kodo ali določite podprogram za odpravljanje napak:

- (void) parserDidEndDocument: (NSXMLParser *) razčlenjevalnik {
če (errorParsing == NE)
{
NSLog (@ "Obdelava XML končana!");
} še {
NSLog (@ "Med obdelavo XML je prišlo do napake);
}
}

Shranite podatke

Številne aplikacije bi tukaj morda želele shraniti podatke ali datoteko XML v datoteko v napravi. Tako naprava, če naprava ne bo povezana z internetom, ko se aplikacija naslednjič naloži, še vedno lahko dobi te informacije.

Seveda ne moremo pozabiti na najpomembnejši del: zahtevati, da aplikacija razčleni datoteko (in ji dodelite spletni naslov, na katerem ga najdete!) Če želite začeti postopek, dodajte to vrstico kode na ustrezno mesto, kjer želite opraviti obdelavo XML:

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