XML-fájlok felismerése Xcode-ban

Az egyik egyszerű feladat, amely a legtöbb alkalmazás gerincét jelenti, képes XML fájlok elemzésére. És szerencsére az Xcode viszonylag könnyű elemezni egy XML-fájlt az Objective-C-ben.

Az XML fájl tartalmazhat bármit az alapadatokról az alkalmazásról egy weboldal RSS-hírcsatornájára . Szintén remek módja lehet az alkalmazásokon belüli távfelügyelet távolról történő frissítésének, elkerülve ezzel, hogy új bináris elemet nyújtson az Apple számára, egyszerűen új elem felvételéhez.

Tehát hogyan dolgozzuk fel XML fájlokat az Xcode-ban? A folyamat lépéseket tartalmaz a használt változók inicializálásához, az XML parser folyamat elindításához, egy folyamat feldolgozásához, egy egyedi elem kezdetéhez, az elemen belüli karakterekhez (értékekhez) az egyes elemek vége és az elemzési folyamat vége.

Ebben a példában az internetről egy fájlt értelmezünk egy adott webcím ( URL ) átadásával.

Kezdjük a fejlécfájl kiépítésével. Ez egy példa egy nagyon alaptartozó fejlécfájlra a Detail View Controller számára, amely minimális követelményeket tartalmaz a fájl feldolgozásához:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * cikkek;
NSMutableDictionary * elem;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL errorParsing;
}

@property (nonatomikus, megtartja) IBOutlet DetailViewController * detailViewController;

- (void) parseXMLFileAtURL: (NSString *) URL;

A parseXMLFileAtURL függvény elindítja a folyamatot számunkra. Amikor befejeződik, az NSMutableArray "cikkek" fogják tartani az adataikat. A tömb olyan változó szótárakból áll, amelyek az XML fájl mezőneveihez kapcsolódnak.

Most, hogy létrehoztuk a szükséges változókat, továbblépünk a .m fájlban lévő folyamathoz.

- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Fájl megtalálás és elemzés megkezdődött");

}

Ez a funkció a folyamat elején fut. Nincs szükség semmire ebben a függvényben, de ha feladatot szeretne végrehajtani, amikor a fájl elkezdődik, akkor itt kell elhelyeznie a kódot.

- (üres) parseXMLFileAtURL: (NSString *) URL
{

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, mint a Gecko) verziója / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField: @ "Felhasználó-ügynök"];
xmlFile = [NSURLCconnection sendSynchronousRequest: kérés returningResponse: nil error: nil];


cikkek = [[NSMutableArray alloc] init];
errorParsing = NO;

rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self];

// Előfordulhat, hogy ezek közül néhányat az XML-fájl típusától függően kell megadnia
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[rssParser parse];

}

Ez a funkció arra utasítja a motort, hogy töltse le a fájlt egy adott webcímen (URL), és indítsa el a feldolgozás folyamatát.

Elmondjuk a távoli kiszolgálónak, hogy Safari vagyunk Mac-en, csak abban az esetben, ha a szerver át akarja irányítani az iPhone / iPad mobil verziót.

A végén található lehetőségek bizonyos XML-fájlokra jellemzőek. A legtöbb RSS fájl és generikus XML fájl nem lesz szükségük bekapcsolva.

- (üres) parser: (NSXMLParser *) Parser parseErrorOccurred: (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "Hiba kód% i", [parseError kód]];
NSLog (@ "XML elemzés hiba:% @", errorString);


errorParsing = IGEN;
}

Ez egy egyszerű hibaellenőrző útválasztás, amely bináris értéket állít be, ha hibát észlel. Ehhez szükség lehet valami konkrétabbra attól függően, hogy mit csinálsz. Ha hiba esetén egyszerűen csak egy kódot kell futtatni a feldolgozás után, akkor a hibaparaméter bináris változó hívható le.

(NSXMLParser *) elemző didStartElement: (NSString *) elemName névtérURI: (NSString *) névtérURI minősítettName: (NSString *) qNév attribútumok: (NSDictionary *) attribútumDict {
currentElement = [elementName másolat];
ElementValue = [[NSMutableString allokáció] init];
ha ([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];

}

}

Az XML elemző húsának három funkciója van: az egyik olyan elem, amely egy elem elején fut, az elem elemzésének közepén fut, és az elem végén.

Ebben a példában egy olyan fájlt fogunk értelmezni, amely hasonlít az RSS fájlokhoz, amelyek az elemek elemekké csoportosíthatók az "elemek" címsor alatt az XML fájlban. A feldolgozás kezdetén a "tétel" elem nevét ellenőrizzük, és elemszót hozzuk fel, amikor új csoportot észlelünk. Ellenkező esetben inicializáljuk a változó értékét.

- (üres) parser: (NSXMLParser *) értelmező megtalálva Karakterek: (NSString *) string {
[ElementValue appendString: string];
}

Ez az egyszerű rész. Amikor találunk karaktereket, egyszerűen hozzáadjuk őket az "ElementValue" változóhoz.

- (void) parser: (NSXMLParser *) elemző didEndElement: (NSString *) elemName névtérURI: (NSString *) névtérURI qualifiedName: (NSString *) qNév {
ha ([elementName isEqualToString: @ "item"]) {
[cikkek addObject: [item copy]];
} más {
[item setObject: ElementValue forKey: elementName];
}

}

Amikor befejeztük az elem feldolgozását, két dolog egyikét kell tennünk: (1) ha a végelem "tétel", befejeztük a csoportunkat, ezért hozzáadjuk a szótárunkat a "cikkekhez" ”.

Vagy (2) ha az elem nem "tétel", az értéket a szótárunkba olyan kulcsmal állítjuk be, amely megfelel az elem nevének. (Ez azt jelenti, hogy nem szükséges egy egyedi változó az XML fájlban lévő egyes mezők számára, de dinamikusabban feldolgozhatjuk őket.)

- (void) parserDidEndDocument: (NSXMLParser *) parser {

ha (errorParsing == NO)
{
NSLog (@ "XML feldolgozás kész!");
} más {
NSLog (@ "Hiba történt az XML feldolgozás során");
}

}

Ez az utolsó funkció, amely a szimulációs rutinunkhoz szükséges. Egyszerűen befejezi a dokumentumot. Minden olyan kódot fel akarsz kérdezni, amelyen a folyamatot be akarod fejezni, vagy valami különlegeset, amit hiba esetén szeretnél tenni.

Az egyik dolog, amit sok alkalmazás szeretne tenni, az, hogy az adatokat és / vagy az XML fájlt az eszközön lévő fájlra mentse. Így, ha a felhasználó nem csatlakozik az internethez legközelebb, amikor betölti az alkalmazást, akkor továbbra is hozzájuthatnak ehhez az információhoz.

Természetesen nem felejthetjük el a legfontosabb részt: megmondjuk alkalmazásának, hogy elemezze a fájlt (és adjon meg egy webcímet, hogy megtalálja!).

A folyamat elindításához egyszerűen hozzá kell adni ezt a kódsorozatot a megfelelő helyhez, ahol az XML feldolgozást szeretné végrehajtani:

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