Skip to main content

Wie analysiert man XML-Dateien in Xcode?

How to Make a Simple Tensorflow Speech Recognizer (April 2025)

How to Make a Simple Tensorflow Speech Recognizer (April 2025)
Anonim

Eine einfache Aufgabe, die das Rückgrat vieler Apps bildet, ist das Parsen von XML-Dateien. Glücklicherweise macht es Xcode relativ einfach, eine XML-Datei in Objective-C zu parsen.

Eine XML-Datei kann alles enthalten, von grundlegenden Daten zu Ihrer App bis hin zu einem RSS-Feed für eine Website. Sie können auch eine großartige Möglichkeit sein, um Informationen in Ihrer App aus der Ferne zu aktualisieren. Dadurch müssen Sie keine neue Binärdatei an Apple übermitteln, sondern müssen nur ein neues Element zu einer Liste hinzufügen.

Wie verarbeiten wir XML-Dateien in Xcode? Der Prozess enthält Schritte zum Initialisieren der zu verwendenden Variablen, Starten des XML-Parser-Prozesses, Einspeisen dieses Prozesses in eine Datei, den Start eines einzelnen Elements, die Zeichen (Wert) innerhalb des Elements, das Ende eines einzelnen Elements und das Ende des Parsing-Prozesses.

In diesem Beispiel analysieren wir eine Datei aus dem Internet, indem wir eine bestimmte Webadresse (URL) übergeben.

Wir beginnen mit dem Aufbau 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 Analysieren unserer Datei:

@ Interface RootViewController: UITableViewController {DetailViewController * detailViewController;NSXMLParser * rssParser;NSMutableArray * Artikel;NSMutableDictionary * item;NSString * currentElement;NSMutableString * ElementValue;BOOL errorParsing;}@ property (nonatomic, keep) IBOutlet DetailViewController * detailViewController;- (void) parseXMLFileAtURL: (NSString *) URL;Die Funktion parseXMLFileAtURL startet den Prozess für uns. Wenn der Vorgang abgeschlossen ist, werden die "Artikel" von NSMutableArray unsere Daten enthalten. Das Array besteht aus veränderbaren Wörterbüchern mit Schlüsseln, die sich auf die Feldnamen in der XML-Datei beziehen.

Nachdem wir die benötigten Variablen eingerichtet haben, fahren wir mit dem Treffen des Prozesses in der .m-Datei fort:

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

Diese Funktion wird beim Start des Prozesses ausgeführt. Es ist nicht notwendig, etwas in diese Funktion einzufügen, aber wenn Sie eine Aufgabe ausführen möchten, wenn die Datei analysiert wird, fügen Sie Ihren Code hier ein.

- (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;request setValue: agentString fürHTTPHeaderField: @ "User-Agent";xmlFile = NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil;articles = NSMutableArray-Zuordnung init;errorParsing = NEIN;rssParser = NSXMLParser-Zuordnung initWithData: xmlFile;rssParser setDelegate: self;// Möglicherweise müssen Sie einige davon aktivieren, abhängig vom Typ der XML-Datei, die Sie analysierenrssParser setShouldProcessNamespaces: NO;rssParser setShouldReportNamespacePrefixes: NEIN;rssParser setShouldResolveExternalEntities: NO;rssParser-Analyse;}

Diese Funktion weist die Engine an, eine Datei an einer bestimmten Webadresse (URL) herunterzuladen und den Prozess für die Analyse zu starten. Wir sagen dem Remote-Server, dass wir eine Safari auf einem Mac sind, für den Fall, dass der Server versucht, das iPhone / iPad auf eine mobile Version umzuleiten.Die Optionen am Ende sind für bestimmte XML-Dateien spezifisch. Die meisten RSS-Dateien und generischen XML-Dateien müssen nicht aktiviert sein.

- (void) Parser: (NSXMLParser *) Parser parseErrorOccurred: (NSError *) parseError {NSString * errorString = NSString stringWithFormat: @ "Fehlercode% i", ParseError-Code;NSLog (@ "Fehler beim Analysieren von XML:% @", errorString);errorParsing = JA;}Dies ist ein einfaches Routing zur Fehlerprüfung, bei dem ein binärer Wert festgelegt wird, wenn ein Fehler auftritt. Abhängig davon, was Sie tun, benötigen Sie hier möglicherweise etwas genaueres. Wenn Sie im Fehlerfall einfach Code nach der Verarbeitung ausführen müssen, kann die binäre Variable errorParsing zu diesem Zeitpunkt aufgerufen werden.

- (void) Parser: (NSXMLParser *) Parser didStartElement: (NSString *) Elementname NamespaceURI: (NSString *) NamespaceURI QualifizierterName: (NSString *) QName-Attribute: (NSDictionary *) attributeDict {currentElement = ElementName Kopie;ElementValue = NSMutableString-Zuordnung init;if (elementName isEqualToString: @ "item") {item = NSMutableDictionary-Zuordnung init;}} Das Fleisch des XML-Parsers enthält drei Funktionen: eine, die am Anfang eines einzelnen Elements ausgeführt wird, eine, die während der Analyse des Elements ausgeführt wird, und eine, die am Ende des Elements ausgeführt wird.

In diesem Beispiel wird eine Datei analysiert, die den RSS-Dateien ähnelt, die Elemente in Gruppen unter der Überschrift "Elemente" in der XML-Datei aufteilen. Zu Beginn der Verarbeitung prüfen wir den Elementnamen "item" und ordnen unser Artikelwörterbuch zu, wenn eine neue Gruppe erkannt wird. Ansonsten initialisieren wir unsere Variable für den Wert.

- (void) Parser: (NSXMLParser *) Parser foundCharacters: (NSString *) Zeichenfolge {ElementValue appendString: string;}

Dies ist der einfache Teil. Wenn wir Zeichen finden, fügen wir sie einfach unserer Variablen "ElementValue" hinzu.

- (void) Parser: (NSXMLParser *) Parser didEndElement: (NSString *) Elementname NamespaceURI: (NSString *) NamespaceURI QualifizierterName: (NSString *) qName {if (elementName isEqualToString: @ "item") {Artikel addObject: Artikel kopieren;} else {item setObject: ElementValue forKey: elementName;}}

Wenn wir mit der Bearbeitung eines Elements fertig sind, müssen wir zwei Dinge tun: (1) Wenn das Endelement "item" ist, haben wir unsere Gruppe fertiggestellt, sodass wir unser Wörterbuch zu unserer Reihe von Artikeln hinzufügen ". Oder (2) Wenn das Element nicht "item" ist, 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 in der XML-Datei eine individuelle Variable benötigen. Wir können sie etwas dynamischer verarbeiten.)

- (void) parserDidEndDocument: (NSXMLParser *) Parser {if (errorParsing == NEIN){NSLog (@ "XML-Verarbeitung erfolgt!");} else {NSLog (@ "Fehler bei der XML-Verarbeitung");}}

Dies ist die letzte Funktion, die für unsere Parsing-Routine erforderlich ist. Es beendet einfach das Dokument. Sie können den Code, den Sie abschließen möchten, hier ablegen, oder etwas Besonderes, das Sie im Fehlerfall ausführen möchten.

Viele Apps möchten hier möglicherweise die Daten und / oder XML-Dateien in einer Datei auf dem Gerät speichern. Wenn der Benutzer beim nächsten Laden der App nicht mit dem Internet verbunden ist, kann er diese Informationen trotzdem abrufen.

Natürlich können wir den wichtigsten Teil nicht vergessen: Ihre Anwendung wird aufgefordert, die Datei zu analysieren (und eine Webadresse anzugeben, unter der Sie sie finden können!).

Um den Prozess zu starten, müssen Sie diese Codezeile nur an der entsprechenden Stelle hinzufügen, an der Sie die XML-Verarbeitung durchführen möchten:

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