Aj keď vstavaný XML syntaktický analyzátor dodáva novej počítačovej alebo mobilnej aplikácii skutočnú hodnotu, pretože kódovanie tejto funkcie zvyčajne vyžaduje veľa času na vývoj a testovanie verzie beta. Program Xcode od spoločnosti Apple obsahuje analyzátor XML, ktorý obchádza väčšinu tejto manuálnej práce.
An XML súbor môže obsahovať čokoľvek od základných údajov o vašej aplikácii po súbor RSS zdroj pre webovú stránku. Môžu byť tiež skvelým spôsobom, ako na diaľku aktualizovať informácie vo vašej aplikácii, čím obídu potrebu odosielať spoločnosti Apple nový binárny súbor jednoducho pridať novú položku do zoznamu.
Proces Xcode
Zabudovaný proces Xcode obsahuje kroky na inicializáciu použitých premenných, spustenie procesu syntaktického analyzátora XML, zavedenie tohto procesu do súboru, posúdenie jednotlivých prvkov a znakov (hodnoty) v týchto prvkoch, rozpoznanie konca jednotlivého prvku a ukončenie syntaktickej analýzy procesu.
Použite analyzátor XML
Na ilustráciu podrobností analyzujeme ukážkový súbor z internetu tak, že mu odovzdáme konkrétnu webovú adresu (URL).
Začnite tvorbou hlavičkového súboru. Toto je príklad veľmi základného hlavičkového súboru pre ovládač detailného zobrazenia s minimálnymi požiadavkami na analýzu nášho súboru:
@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;
NSXMLParser * rssParser;
Články NSMutableArray *;
Položka NSMutableDictionary *;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL errorParsing;
}
@property (nonatomic, keep) IBOutlet DetailViewController * detailViewController;
- (void) parseXMLFileAtURL: (NSString *) URL;
Proces spustí funkcia parseXMLFileAtURL. Keď to skončí, „články“ NSMutableArray obsahujú údaje. Pole pozostáva z premenlivých slovníkov s kľúčmi súvisiacimi s názvami polí v súbore XML.
Ďalej inicializujte proces:
- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Súbor nájdený a analýza spustená");
}
Táto funkcia beží na začiatku procesu. Do tejto funkcie nie je potrebné nič vkladať, ale ak chcete vykonať úlohu, keď sa súbor začne analyzovať, sem by ste vložili svoj kód.
Dajte programu pokyn, aby niečo stiahlo
Ďalej dajte programu pokyn, aby niečo stiahlo:
- (void) parseXMLFileAtURL: (NSString *) URL
{
NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; sk-us) AppleWebKit / 525.27.1 (KHTML, ako Gecko) verzia / 3.2.1 Safari / 525.27.1 ";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: požiadavka návratuResponse: žiadna chyba: žiadna];
articles = [[NSMutableArray alloc] init];
errorParsing = NIE;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self];
// Možno budete musieť niektoré z nich zapnúť v závislosti od typu analyzovaného súboru XML
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NIE];
[rssParser setShouldResolveExternalEntities: NO];
[rssParser parse];
}
Táto funkcia dá motoru pokyn na stiahnutie súboru na konkrétnej webovej adrese (URL) a na spustenie procesu jeho analýzy. Vzdialenému serveru hovoríme, že sme Safari bežiaci na Macu, len pre prípad, že by sa server pokúsil presmerovať iPhone / iPad na mobilnú verziu.
Možnosti na konci sú špecifické pre určité súbory XML. Väčšina súborov RSS a všeobecných súborov XML ich nebude musieť mať zapnuté.
Chyba - skontrolujte výsledok
Vykonajte základnú kontrolu chýb výsledku:
- (void) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Kód chyby% i", [kód chyby]];
NSLog (@ "Chyba pri analýze XML:% @", errorString);
errorParsing = ÁNO;
} Toto smerovanie kontroly chýb nastaví binárnu hodnotu, ak dôjde k chybe. Možno tu budete potrebovať niečo konkrétnejšie v závislosti od toho, čo robíte. Ak potrebujete po spracovaní v prípade chyby jednoducho spustiť nejaký kód,
Táto rutina kontroly chýb nastaví binárnu hodnotu, ak dôjde k chybe. Možno tu budete potrebovať niečo konkrétnejšie v závislosti od toho, čo robíte. Ak v prípade chyby potrebujete po spracovaní jednoducho spustiť nejaký kód, je možné v tom čase zavolať binárnu premennú na analýzu chýb.
Analyzujte načítaný obsah
Ďalej program rozdelí načítaný obsah a analyzuje ho:
- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName attributes: (NSDictionary *) attributeDict {
currentElement = [kópia názvu prvku];
ElementValue = [[NSMutableString alloc] init];
if ([[elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];
}
}
Mäso analyzátora XML obsahuje tri funkcie, jednu spustenú na začiatku jednotlivca prvok, ten, ktorý beží v strede syntaktickej analýzy prvku, a ten, ktorý beží na konci element.
V tomto príklade analyzujeme súbor podobný súborom RSS, ktorý rozdeľuje prvky do skupín pod hlavičkou položky v rámci súboru XML. Na začiatku spracovania kontrolujeme názov prvku „item“ a pri zisťovaní novej skupiny alokujeme náš slovník položiek. Inak inicializujeme našu premennú pre hodnotu:
- (void) parser: (NSXMLParser *) nájdený syntaktický analyzátor Znaky: (NSString *) reťazec {
[ElementValue appendString: string];
}
Keď nájdeme znaky, jednoducho ich pridáme do našej premennej ElementValue:
- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
if ([[elementName isEqualToString: @ "item"]) {
[articles addObject: [item copy]];
} else {
[item setObject: ElementValue forKey: elementName];
}
}
Čo sa stane, keď je analýza dokončená
Keď program dokončí spracovanie prvku, musí urobiť jednu z dvoch vecí:
- Ak je koncový prvok položka, dokončili sme našu skupinu, takže do našej ponuky článkov pridáme náš slovník.
- Ak prvok nie je položka, nastavíme hodnotu v našom slovníku pomocou kľúča, ktorý sa zhoduje s názvom prvku. (To znamená, že nepotrebujeme samostatnú premennú pre každé pole v súbore XML. Môžeme ich spracovať trochu dynamickejšie.)
Toto je posledná funkcia potrebná pre našu syntaktickú rutinu; končí sa tým dokument. Sem vložte ľubovoľný konečný kód alebo zadajte podprogram na opravu chýb:
- (void) parserDidEndDocument: (NSXMLParser *) parser {
if (errorParsing == NIE)
{
NSLog (@ „Spracovanie XML hotové!“);
} else {
NSLog (@ "Počas spracovania XML došlo k chybe");
}
}
Uložte údaje
Jedna vec, ktorú by tu mohlo veľa aplikácií chcieť urobiť, je uložiť dáta alebo súbor XML do súboru v zariadení. Týmto spôsobom, ak zariadenie nie je pripojené k internetu pri ďalšom načítaní aplikácie, môže tieto informácie získať.
Samozrejme nemôžeme zabudnúť na najdôležitejšiu časť: povedať vašej aplikácii, aby analyzovala súbor (a dať mu webovú adresu, aby ho našla na!). Ak chcete spustiť proces, pridajte tento riadok kódu na príslušné miesto, kde chcete vykonať spracovanie XML:
[self parseXMLFileAtURL: @ " http://www.webaddress.com/file.xml"];