Jak analyzovat soubory XML ve formátu Xcode

Jeden jednoduchý úkol, který je páteří mnoha aplikací, je schopnost analyzovat soubory XML. A naštěstí Xcode umožňuje poměrně snadné analyzovat soubor XML v Objective-C.

Soubor XML může obsahovat cokoli od základních údajů o vaší aplikaci ke zdroji RSS pro web. Mohou být také skvělým způsobem, jak vzdáleně aktualizovat informace v rámci vaší aplikace, čímž obejít nutnost předložit novou binární aplikaci Apple jednoduše přidat novou položku do seznamu.

Takže jak zpracujeme XML soubory v Xcode? Proces obsahuje kroky pro inicializaci proměnných, které mají být použity, spuštění procesu parseru XML, krmení tohoto procesu souboru, zahájení jednotlivého prvku, znaků (hodnoty) v rámci prvku, konec jednotlivého prvku a konec procesu parsování.

V tomto příkladu budeme analyzovat soubor z Internetu předáním konkrétní webové adresy ( URL ).

Začneme se sestavením souboru záhlaví. Toto je příklad velmi základního souboru záhlaví pro Controller podrobného zobrazení s minimálními požadavky pro analýzu našeho souboru:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

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

@property (nonatomic, zachovat) IBOutlet DetailViewController * detailViewController;

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

Funkce parseXMLFileAtURL spustí proces pro nás. Po dokončení budou články "NSMutableArray" uchovávat naše data. Pole bude tvořeno měnitelnými slovníky s klíči souvisejícími s názvy polí v souboru XML.

Nyní, když jsme nastavili potřebné proměnné, přesuneme se na setkání procesu v souboru m:

- (neplatný) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Nalezený soubor a spuštění analýzy");

}}

Tato funkce běží na začátku procesu. Není třeba nic umísťovat do této funkce, ale pokud chcete provést úkol, když se soubor začne analyzovat, je to místo, kde byste vložili svůj kód.

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

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, podobně jako Gecko) verze / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString proHTTPHeaderField: @ "User-Agent");
xmlFile = [NSURLConnection sendSynchronousRequest: request returningResponse: chyba nula: nula];


články = [[NSMutableArray alokovat] init];
errorParsing = NE;

rssParser = [[NSXMLParser alokovat] initWithData: xmlFile];
[rssParser setDelegate: vlastní];

// Některé z nich budete muset zapnout v závislosti na typu souboru XML, který analyzujete
[rssParser setShouldProcessNamespaces: NE];
[rssParser setShouldReportNamespacePrefixes: NE];
[rssParser setShouldResolveExternalEntities: NE];

[rssParser parse];

}}

Tato funkce instruuje motor stáhnout soubor na konkrétní webovou adresu (URL) a spustit proces pro jeho analýzu.

Říkáme vzdálenému serveru, že jsme počítačem Safari spuštěným v systému Mac v případě, že se server pokusí přesměrovat iPhone / iPad do mobilní verze.

Možnosti na konci jsou specifické pro určité soubory XML. Většina souborů RSS a generických souborů XML je nebude zapotřebí zapnuto.

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

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


errorParsing = ANO;
}}

Jedná se o jednoduché směrování pro kontrolu chyb, které nastaví binární hodnotu, pokud narazí na chybu. Možná budete potřebovat něco konkrétnějšího v závislosti na tom, co děláte. Pokud potřebujete spustit nějaký kód po zpracování v případě chyby, v tomto okamžiku může být vyvolána binární proměnná errorParsing.

- (neplatný) analyzátor: (NSXMLParser *) analyzátor didStartElement: (NSString *) názevName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName atributy:
currentElement = [kopie elementName];
ElementValue = [[NSMutableString alokovat] init];
pokud ([elementName isEqualToString: @ "item"]) {
položka = [[NSMutableDictionary alloc] init];

}}

}}

Maso syntaktického analyzátoru XML obsahuje tři funkce, které začínají na začátku jednotlivého prvku, ten, který běží uprostřed analyzování elementu a ten, který běží na konci prvku.

V tomto příkladu budeme analyzovat soubor podobný souborům RSS, které rozdělují prvky do skupin pod nadpisem "položky" v souboru XML. Na začátku zpracování kontrolujeme název elementu "item" a přidělíme náš slovník slov, když je detekována nová skupina. V opačném případě inicializujeme proměnnou hodnotu.

- (neplatný) analyzátor: (NSXMLParser *) analyzátor nalezenCharacters: (NSString *) string {
[ElementValue appendString: řetězec];
}}

To je snadná část. Když najdeme znaky, jednoduše je přidáme do naší proměnné "ElementValue".

- (neplatný) parser: (NSXMLParser *) parser didEndElement: (NSString *) názevName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
pokud ([elementName isEqualToString: @ "item"]) {
[články addObject: [kopie položky]];
} else {
[položka setObject: ElementValue forKey: elementName];
}}

}}

Když dokončíme zpracování prvku, musíme provést jednu ze dvou věcí: (1) pokud je koncový prvek "položka", jsme dokončili naši skupinu, a proto přidáme náš slovník do naší řady "článků ".

Nebo (2) jestliže prvek není "položka", nastavíme hodnotu v našem slovníku klíčem, který odpovídá názvu prvku. (To znamená, že pro každé pole v souboru XML nepotřebujeme individuální proměnnou. Můžeme je zpracovat trochu dynamičtěji.)

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

pokud (errorParsing == NE)
{{
NSLog (@ "Zpracování XML provedeno!");
} else {
NSLog (@ "Při zpracování XML došlo k chybě");
}}

}}

Jedná se o poslední funkci potřebnou pro rutinní analýzu. Dokument jednoduše končí. Budete mít k dispozici jakýkoliv kód, který chcete ukončit, nebo něco zvláštního, co byste chtěli udělat v případě chyby.

Jedna věc, kterou by zde mnoho aplikací chtělo udělat, je uložit data a / nebo soubor XML do souboru v zařízení. Tímto způsobem, pokud uživatel není připojen k internetu při příštím načtení aplikace, mohou se stále dostat na tyto informace.

Samozřejmě, nemůžeme zapomenout na nejdůležitější část: informovat vaši přihlášku o tom, jak analyzovat soubor (a dát mu webovou adresu, aby to našel!).

Pro spuštění procesu stačí přidat tento řádek kódu na vhodné místo, kde chcete zpracovat XML:

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