Cum se analizează fișierele XML în Xcode

click fraud protection

Deși este încorporat XML analizorul adaugă valoare reală unei noi aplicații desktop sau mobile, codificând că funcționalitatea necesită de obicei mult timp de dezvoltare și testare beta. Programul Apple Xcode include un analizor XML care ocolește cea mai mare parte a acestei lucrări manuale.

Un XML fișierul poate conține orice, de la date de bază despre aplicația dvs. la un fișier Flux RSS pentru un site web. Ele pot fi, de asemenea, o modalitate excelentă de actualizare a informațiilor din aplicația dvs. de la distanță, ocolind astfel nevoia de a trimite un nou binar către Apple pur și simplu pentru a adăuga un nou articol la o listă.

Procesul Xcode

Procesul Xcode încorporat conține pași pentru inițializarea variabilelor care urmează să fie utilizate, pornirea procesului de analiză XML, alimentarea procesului respectiv cu un fișier, evaluarea elementelor individuale și a caracterelor (valoarea) din aceste elemente, recunoașterea sfârșitului unui element individual și terminarea analizei proces.

instagram viewer

Utilizați analizorul XML

Pentru a ilustra detaliile, vom analiza un exemplu de fișier de pe internet, trimițându-i o anumită adresă web (URL).

Începeți cu construirea fișierului antet. Acesta este un exemplu de fișier antet foarte simplu pentru un controler de vizualizare detaliu cu cerințele minime pentru analizarea fișierului nostru:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;
NSXMLParser * rssParser;
Articole NSMutableArray *;
Element NSMutableDictionary *;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL errorParsing;
}
@property (nonatomic, keep) IBOutlet DetailViewController * detailViewController;
- (nul) parseXMLFileAtURL: (NSString *) URL;


Funcția parseXMLFileAtURL pornește procesul. Când se termină, „articolele” NSMutableArray conțin datele. Matricea constă din dicționare mutabile cu chei legate de numele câmpurilor din fișierul XML.

Apoi, inițializați procesul:

- (nul) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Fișierul a fost găsit și analiza a început");
}

Această funcție rulează la începutul procesului. Nu este nevoie să puneți nimic în această funcție, dar dacă doriți să efectuați o sarcină atunci când fișierul începe să fie analizat, aici veți pune codul.

Instruiți programul să descarce ceva

Apoi, instruiți programul să descarce ceva:

- (nul) parseXMLFileAtURL: URL (NSString *)
{
NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, cum ar fi Gecko) Versiune / 3.2.1 Safari / 525.27.1 ";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: request ReturnResponse: nil error: nil];
articole = [[NSMutableArray alloc] init];
errorParsing = NU;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self];
// Poate fi necesar să activați unele dintre acestea în funcție de tipul de fișier XML pe care îl analizați
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];
[rssParser parse];
}


Această funcție instruiește motorul să descarce un fișier la o anumită adresă web (URL) și să înceapă procesul de analiză a acestuia. Îi spunem serverului de la distanță că suntem un Safari care rulează pe Mac doar în cazul în care serverul încearcă să redirecționeze iPhone / iPad către o versiune mobilă.

Opțiunile de la sfârșit sunt specifice anumitor fișiere XML. Cele mai multe fișiere RSS și fișiere XML generice nu vor avea nevoie de ele activate.

Eroare-Verificați rezultatul

Efectuați o verificare de bază a erorilor asupra rezultatului:

- (void) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Cod de eroare% i", [cod parseError]];
NSLog (@ "Eroare la analizarea XML:% @", errorString);
errorParsing = DA;
} Această rutare de verificare a erorilor stabilește o valoare binară dacă întâmpină o eroare. Este posibil să aveți nevoie de ceva mai specific aici, în funcție de ceea ce faceți. Dacă pur și simplu trebuie să rulați un anumit cod după procesare în caz de eroare,


Această rutină de verificare a erorilor stabilește o valoare binară dacă întâmpină o eroare. Este posibil să aveți nevoie de ceva mai specific aici, în funcție de ceea ce faceți. Dacă pur și simplu trebuie să rulați un anumit cod după procesare în caz de eroare, variabila binară de analiză a erorilor poate fi apelată în acel moment.

Analizați conținutul recuperat

Apoi, programul descompune conținutul recuperat și îl analizează:

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


Carnea analizorului XML conține trei funcții, una care rulează la începutul unei persoane element, unul care rulează în timpul analizei elementului și unul care rulează la sfârșitul fișierului element.

Pentru acest exemplu, vom analiza un fișier similar cu fișierele RSS care împart elementele în grupuri sub titlul obiecte în cadrul fișierului XML. La începutul procesării, verificăm numele elementului „element” și alocăm dicționarul nostru de elemente atunci când este detectat un grup nou. În caz contrar, ne inițializăm variabila pentru valoarea:

- Parser (nul): (NSXMLParser *) parser găsit Caracterele: (NSString *) șir {
[ElementValue appendString: șir];
}


Când găsim caractere, le adăugăm pur și simplu la variabila noastră ElementValue:

- (nul) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI calificatNume: (NSString *) qName {
if ([elementName isEqualToString: @ "item"]) {
[articole addObject: [copie articol]];
} altceva {
[item setObject: ElementValue forKey: elementName];
}
}

Ce se întâmplă când analiza este completă

Când programul termină de procesat un element, acesta trebuie să facă unul dintre cele două lucruri:

  • Dacă elementul final este articol, am terminat grupul nostru, așa că vom adăuga dicționarul nostru la gama noastră de articole.
  • Dacă elementul nu este articol, vom seta valoarea în dicționarul nostru cu o cheie care se potrivește cu numele elementului. (Aceasta înseamnă că nu avem nevoie de o variabilă individuală pentru fiecare câmp din fișierul XML. Le putem procesa puțin mai dinamic.)

Aceasta este ultima funcție necesară pentru rutina noastră de analiză; încheie documentul. Puneți aici orice cod final sau specificați un subrutină de corectare a erorilor:

- (nul) parserDidEndDocument: (NSXMLParser *) parser {
if (errorParsing == NU)
{
NSLog (@ "Procesare XML terminată!");
} altceva {
NSLog (@ "Eroare apărută în timpul procesării XML");
}
}

Salvați datele

Un lucru pe care multe aplicații ar putea dori să îl facă aici este să salvați datele sau fișierul XML într-un fișier de pe dispozitiv. În acest fel, dacă dispozitivul nu este conectat la internet data viitoare când se încarcă aplicația, poate primi în continuare aceste informații.

Desigur, nu putem uita cea mai importantă parte: să spui aplicației tale să analizeze fișierul (și să îi oferi o adresă web pentru a-l găsi!). Pentru a începe procesul, adăugați această linie de cod în locul corespunzător în care doriți să faceți procesarea XML:

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