Ako analyzovať súbory XML v Xcode

Jednou jednoduchou úlohou, ktorá je chrbticou mnohých aplikácií, je schopnosť analyzovať súbory XML. A našťastie Xcode pomerne ľahko analyzuje súbor XML v Objective-C.

Súbor XML môže obsahovať niečo zo základných údajov o vašej aplikácii na informačný kanál RSS pre webové stránky. Môžu byť tiež skvelým spôsobom aktualizácie informácií v rámci vašej aplikácie na diaľku, čím sa obíde potreba predložiť nový binárny program spoločnosti Apple jednoducho pridať novú položku do zoznamu.

Takže ako spracujeme XML súbory v Xcode? Proces obsahuje kroky na inicializáciu premenných, ktoré sa majú použiť, spúšťanie procesu parseru XML, napájanie tohto procesu súboru, začiatok jednotlivého prvku, znaky (hodnota) v rámci elementu, koniec jednotlivých prvkov a koniec procesu parsovania.

V tomto príklade analyzujeme súbor z Internetu tak, že mu odovzdáme určitú webovú adresu ( URL ).

Začneme budovaním súboru záhlavia. Toto je príklad veľmi základného súboru záhlavia pre kontrolér detailného zobrazenia s minimálnymi požiadavkami na analýzu nášho súboru:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * články;
NSMutableDictionary * položka;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL errorParsing;
}

@property (nonatomic, zachovať) IBOutlet DetailViewController * detailViewController;

- (neplatné) parseXMLFileAtURL: (NSString *) URL;

Funkcia parseXMLFileAtURL spustí proces pre nás. Po dokončení sa články "NSMutableArray" budú uchovávať naše údaje. Pole sa bude skladať z meniteľných slovníkov s kľúčmi súvisiacimi s názvami polí v súbore XML.

Teraz, keď sme nastavili potrebné premenné, prejdeme na stretnutie s procesom v súbore .m:

- (neplatný) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "súbor bol nájdený a parsovanie začalo");

}

Táto funkcia beží na začiatku procesu. Nie je potrebné dať nič do tejto funkcie, ale ak chcete vykonať úlohu, keď sa súbor začne analyzovať, je to miesto, kde by ste vložili svoj kód.

- (neplatné) parseXMLFileAtURL: (NSString *) URL
{

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; sk) AppleWebKit / 525.27.1 (KHTML podobne ako Gecko) Verzia / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString preHTTPHeaderField: @ "User-Agent");
xmlFile = [NSURLConnection sendSynchronousRequest: request returningResponse: nula chyba: nula];


články = [[NSMutableArray alloc] init];
errorParsing = NO;

rssParser = [[NSXMLParser alokovať] initWithData: xmlFile];
[rssParser setDelegate: vlastné];

// Možno budete musieť niektoré z nich zapnúť v závislosti od typu súboru XML, ktorý analyzujete
[rssParser setShouldProcessNamespaces: NIE];
[rssParser setShouldReportNamespacePrefixes: NIE];
[rssParser setShouldResolveExternalEntities: NIE];

[rssParser parse];

}

Táto funkcia inštruuje motor na stiahnutie súboru na konkrétnej webovej adrese (URL) a spustenie procesu jeho analýzy.

Hovoríme vzdialenému serveru, že sme Safari spustený na počítači Mac v prípade, ak sa server pokúsi presmerovať iPhone / iPad na mobilnú verziu.

Možnosti na konci sú špecifické pre určité súbory XML. Väčšina súborov RSS a generických súborov XML ich nebude zapnutá.

- (neplatný) analyzátor: (NSXMLParser *) analyzátor parseErrorOccurred: (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "Kód chyby% i", [parseError code]];
NSLog (@ "Chyba pri analýze XML:% @", errorString);


errorParsing = ÁNO;
}

Jedná sa o jednoduché smerovanie kontroly chýb, ktoré nastaví binárnu hodnotu, ak narazí na chybu. Možno budete potrebovať niečo konkrétnejšie v závislosti od toho, čo robíte. Ak potrebujete spustiť nejaký kód po spracovaní v prípade chyby, vtedy sa dá zavolať binárna premenná errorParsing.

- (neplatný) analyzátor: (NSXMLParser *) analyzátor didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName atribúty:
currentElement = [kópia elementName];
ElementValue = [[NSMutableString alokovať] init];
ak ([elementName jeEqualToString: @ "položka"]) {
položka = [[NSMutableDictionary alloc] init];

}

}

Mäso analyzátora XML obsahuje tri funkcie, ktoré sa spúšťajú na začiatku jednotlivého prvku, ten, ktorý beží v priebehu analyzovania prvku a ten, ktorý beží na konci prvku.

V tomto príklade budeme analyzovať súbor podobný súborom RSS, ktoré rozdeľujú prvky do skupín pod názvom "položky" v rámci súboru XML. Na začiatku spracovania kontrolujeme názov prvku "položka" a prideľujeme náš slovník slov, keď je zistená nová skupina. V opačnom prípade inicializujeme premennú pre hodnotu.

- (void) analyzátor: (NSXMLParser *) analyzátor foundCharacters: (NSString *) string {
[ElementValue appendString: reťazec];
}

To je jednoduchá časť. Keď nájdeme znaky, jednoducho ich pridáme do našej premennej "ElementValue".

- (neplatný) analyzátor: (NSXMLParser *) parser didEndElement: (NSString *) názovName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
ak ([elementName jeEqualToString: @ "položka"]) {
[články addObject: [položka kópia]];
} inak {
[položka setObject: ElementValue preKey: elementName];
}

}

Keď dokončíme spracovanie prvku, musíme urobiť jednu z dvoch vecí: (1) ak je koncový prvok "položka", skončili sme našu skupinu, a preto pridáme náš slovník do nášho poľa "článkov ".

Alebo (2) ak prvok nie je "položka", nastavíme hodnotu v našom slovníku kľúčom, ktorý zodpovedá názvu prvku. (To znamená, že nepotrebujeme individuálnu premennú pre každé pole v súbore XML. Môžeme ich spracovať trochu dynamickejšie.)

- (neplatný) parserDidEndDocument: (NSXMLParser *) parser {

ak (errorParsing == NO)
{
NSLog (@ "spracovanie XML vykonané!");
} inak {
NSLog (@ "Chyba pri spracovaní XML");
}

}

Toto je posledná funkcia potrebná pre našu rutinnú analýzu. Dokument jednoducho končí. Vložíte ľubovoľný kód, ktorý chcete dokončiť, alebo akékoľvek špeciálne riešenie, ktoré by ste chceli urobiť v prípade chyby.

Jedna vec, ktorú by mohli aplikácie robiť tu, je uloženie údajov a / alebo súboru XML do súboru v zariadení. Týmto spôsobom, ak používateľ nie je pripojený k internetu pri ďalšom načítaní aplikácie, môžu sa naďalej dostať k týmto informáciám.

Samozrejme, nesmieme zabudnúť na najdôležitejšiu časť: rozprávanie vašej žiadosti o analýzu súboru (a dávať mu webovú adresu, aby ju našiel!).

Ak chcete spustiť proces, stačí pridať tento riadok kódu na vhodné miesto, kde chcete spracovanie XML vykonať:

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