So analysieren Sie XML-Dateien in Xcode X

click fraud protection

Obwohl ein eingebauter XML Parser fügt einer neuen Desktop- oder mobilen Anwendung einen echten Mehrwert hinzu. Die Codierung dieser Funktionalität erfordert normalerweise viel Entwicklungszeit und Betatests. Das Xcode-Programm von Apple enthält einen XML-Parser, der den Großteil dieser manuellen Arbeit umgeht.

Ein XML Datei kann alles enthalten, von grundlegenden Daten über Ihre App bis hin zu RSS-Feed für eine Webseite. Sie können auch eine großartige Möglichkeit sein, Informationen in Ihrer App aus der Ferne zu aktualisieren, wodurch die Notwendigkeit vermieden wird, eine neue Binärdatei an Apple zu senden, nur um ein neues Element zu einer Liste hinzuzufügen.

Der Xcode-Prozess

Der integrierte Xcode-Prozess enthält Schritte zum Initialisieren der zu verwendenden Variablen, zum Starten des XML-Parser-Prozesses, zum Einspeisen einer Datei in diesen Prozess, Bewerten einzelner Elemente und der Zeichen (Werte) innerhalb dieser Elemente, Erkennen des Endes eines einzelnen Elements und Beenden des Parsings Prozess.

instagram viewer

Verwenden Sie den XML-Parser

Zur Veranschaulichung der Details analysieren wir eine Beispieldatei aus dem Internet, indem wir ihr eine bestimmte Webadresse übergeben (URL).

Beginnen Sie mit dem Erstellen der Header-Datei. Dies ist ein Beispiel für eine sehr einfache Header-Datei für einen Detail View Controller mit den Mindestanforderungen für das Parsen unserer Datei:

@Schnittstelle RootViewController: UITableViewController {
DetailViewController *detailViewController;
NSXMLParser *rssParser;
NSMutableArray *Artikel;
NSMutableDictionary *Element;
NSString *currentElement;
NSMutableString *ElementValue;
BOOL errorParsing;
}
@property (nichtatomar, beibehalten) IBOutlet DetailViewController *detailViewController;
- (ungültig) parseXMLFileAtURL:(NSString *)URL;


Die Funktion parseXMLFileAtURL startet den Prozess. Wenn es fertig ist, enthalten die NSMutableArray-"Artikel" die Daten. Das Array besteht aus veränderlichen Wörterbüchern mit Schlüsseln, die sich auf die Feldnamen in der XML-Datei beziehen.

Als nächstes initialisieren Sie den Prozess:

- (void) parserDidStartDocument:(NSXMLParser *)parser{
NSLog(@"Datei gefunden und Parsing gestartet");
}

Diese Funktion wird zu Beginn des Prozesses ausgeführt. Sie müssen nichts in diese Funktion eingeben, aber wenn Sie eine Aufgabe ausführen möchten, wenn die Datei mit dem Parsen beginnt, können Sie Ihren Code hier einfügen.

Weisen Sie das Programm an, etwas herunterzuladen

Als nächstes weisen Sie das Programm an, etwas herunterzuladen:

- (void) parseXMLFileAtURL:(NSString *)URL
{
NSString *agentString = @"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; de-de) AppleWebKit/525.27.1 (KHTML, wie Gecko) Version/3.2.1 Safari/525.27.1";
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[setValue anfordern: agentString forHTTPHeaderField:@"User-Agent"];
xmlFile = [ NSURLConnection sendSynchronousRequest: Request returnResponse: nil error: nil ];
Artikel = [[NSMutableArray alloc] init];
errorParsing=NEIN;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self];
// Je nach Typ der zu analysierenden XML-Datei müssen Sie möglicherweise einige davon aktivieren may
[rssParser setShouldProcessNamespaces: NEIN];
[rssParser setShouldReportNamespacePrefixes: NEIN];
[rssParser setShouldResolveExternalEntities: NEIN];
[rssParser-Analyse];
}


Diese Funktion weist die Engine an, eine Datei unter einer bestimmten Webadresse (URL) herunterzuladen und den Prozess zum Parsen zu starten. Wir teilen dem Remote-Server mit, dass wir eine Safari auf einem Mac sind, nur für den Fall, dass der Server versucht, das iPhone/iPad auf eine mobile Version umzuleiten.

Die Optionen am Ende sind spezifisch für bestimmte XML-Dateien. Die meisten RSS-Dateien und generischen XML-Dateien müssen nicht aktiviert sein.

Fehler-Überprüfen Sie das Ergebnis

Führen Sie eine grundlegende Fehlerprüfung des Ergebnisses durch:

- (void) parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
NSString *errorString = [NSString stringWithFormat:@"Fehlercode %i", [parseError code]];
NSLog(@"Fehler beim Parsen von XML: %@", errorString);
errorParsing=JA;
}Dieses fehlerüberprüfende Routing setzt einen Binärwert, wenn ein Fehler auftritt. Möglicherweise benötigen Sie hier etwas spezifischeres, je nachdem, was Sie tun. Wenn Sie im Fehlerfall nach der Verarbeitung einfach Code ausführen müssen, ist die


Diese Fehlerprüfroutine setzt einen Binärwert, wenn ein Fehler auftritt. Möglicherweise benötigen Sie hier etwas spezifischeres, je nachdem, was Sie tun. Wenn Sie im Fehlerfall nach der Verarbeitung einfach Code ausführen müssen, kann die binäre Variable zur Fehleranalyse zu diesem Zeitpunkt aufgerufen werden.

Analysieren Sie den abgerufenen Inhalt

Als nächstes zerlegt das Programm den abgerufenen Inhalt und analysiert ihn:

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


Das Fleisch des XML-Parsers enthält drei Funktionen, eine, die am Anfang eines Individuums ausgeführt wird -Element, eines, das während der Analyse des Elements ausgeführt wird, und eines, das am Ende des Element.

In diesem Beispiel analysieren wir eine Datei ähnlich der von RSS-Dateien, die Elemente in Gruppen unter der Überschrift zerlegt Artikel innerhalb der XML-Datei. Zu Beginn der Verarbeitung prüfen wir den Elementnamen "item" und belegen unser Item-Wörterbuch, wenn eine neue Gruppe erkannt wird. Andernfalls initialisieren wir unsere Variable für den Wert:

- (void) parser:(NSXMLParser *)parser gefundenCharacters:(NSString *)string{
[ElementValue appendString: string];
}


Wenn wir Zeichen finden, fügen wir sie einfach zu unserer Variablen hinzu ElementWert:

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI QualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
[Artikel addObject:[Artikel kopieren]];
} sonst {
[item setObject: ElementValue forKey: elementName];
}
}

Was passiert, wenn das Parsing abgeschlossen ist

Wenn das Programm die Verarbeitung eines Elements abgeschlossen hat, muss es eines von zwei Dingen tun:

  • Wenn das Endelement ist Artikel, wir haben unsere Gruppe beendet, also werden wir unser Wörterbuch zu unserem Artikel-Array hinzufügen.
  • Wenn das Element nicht ist Artikel, setzen wir den Wert in unserem Wörterbuch mit einem Schlüssel, der dem Namen des Elements entspricht. (Das bedeutet, dass wir nicht für jedes Feld innerhalb der XML-Datei eine eigene Variable benötigen. Wir können sie etwas dynamischer verarbeiten.)

Dies ist die letzte Funktion, die für unsere Parsing-Routine benötigt wird; es beendet das Dokument. Geben Sie hier einen beliebigen endgültigen Code ein oder geben Sie eine fehlerkorrigierende Subroutine an:

- (void) parserDidEndDocument:(NSXMLParser *)parser {
if (errorParsing == NEIN)
{
NSLog(@"XML-Verarbeitung abgeschlossen!");
} sonst {
NSLog(@"Bei der XML-Verarbeitung ist ein Fehler aufgetreten");
}
}

Sichere die Daten

Viele Apps möchten hier möglicherweise die Daten- oder XML-Datei in einer Datei auf dem Gerät speichern. Wenn das Gerät beim nächsten Laden der App nicht mit dem Internet verbunden ist, kann es auf diese Weise immer noch auf diese Informationen zugreifen.

Natürlich dürfen wir den wichtigsten Teil nicht vergessen: Ihrer Anwendung mitzuteilen, dass sie die Datei analysieren soll (und ihr eine Webadresse zu geben, unter der sie gefunden werden kann!). Um den Prozess zu starten, fügen Sie diese Codezeile an der entsprechenden Stelle hinzu, an der Sie die XML-Verarbeitung durchführen möchten:

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