Skip to main content

Sådan analyseres XML-filer i Xcode

Sådan bruger du Google Analytics (Kan 2025)

Sådan bruger du Google Analytics (Kan 2025)
Anonim

En simpel opgave, der er rygraden til mange apps, er evnen til at analysere XML-filer. Og heldigvis gør Xcode det forholdsvis nemt at analysere en XML-fil i Objective-C.

En XML-fil kan indeholde alt fra grundlæggende data om din app til et RSS-feed til et websted. De kan også være en fantastisk måde at opdatere informationer på i din fjernadgang, og dermed omgå behovet for at indsende et nyt binært til Apple, blot at tilføje et nyt emne til en liste.

Så hvordan behandler vi XML-filer i Xcode? Processen indeholder trin til initialisering af de variable, der skal bruges, start af XML-parserprocessen, fodring der behandler en fil, starten på et individuelt element, tegnene (værdi) inden for elementet, slutningen af ​​et enkelt element og slutningen af analyseprocessen.

I dette eksempel analyserer vi en fil fra internettet ved at sende den en bestemt webadresse (URL).

Vi begynder med at bygge hovedtekstfilen ud. Dette er et eksempel på en meget grundlæggende headerfil til en Detail View Controller med minimumskravene til at analysere vores fil:

@interface RootViewController: UITableViewController {DetailViewController * detailViewController;NSXMLParser * rssParser;NSMutableArray * artikler;NSMutableDictionary * element;NSString * currentElement;NSMutableString * ElementValue;BOOL errorParsing;}@property (nonatomic, retain) IBOutlet DetailViewController * detailViewController;- (void) parseXMLFileAtURL: (NSString *) URL;Funktionen parseXMLFileAtURL starter processen for os. Når det er færdigt, vil NSMutableArray "artikler" holde vores data. Arrayet vil bestå af mutable ordbøger med nøgler relateret til feltnavne i XML-filen.

Nu hvor vi har oprettet de nødvendige variable, vil vi gå videre til mødet af processen i .m-filen:

- (void) parserDidStartDocument: (NSXMLParser *) parser {NSLog (@ "Fil fundet og parsing startet");}

Denne funktion kører ved starten af ​​processen. Der er ikke behov for at sætte noget i denne funktion, men hvis du vil udføre en opgave, når filen begynder at blive analyseret, er det her, hvor du vil lægge din kode.

- (void) parseXMLFileAtURL: (NSString *) URL{NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-os) AppleWebKit / 525.27.1 (KHTML, som Gecko) Version / 3.2.1 Safari / 525.27.1";NSMutableURLRequest * request = NSMutableURLRequest requestWithURL:NSURL URLWithString: URL;request setValue: agentString forHTTPHeaderField: @ "User-Agent";xmlFile = NSURLConnection sendSynchronousRequest: anmodning returneringResponse: null fejl: nul;artikler = NSMutableArray alloc init;errorParsing = NO;rssParser = NSXMLParser allokere initWithData: xmlFile;rssParser setDelegate: self;// Du kan muligvis slå nogle af disse på, afhængigt af typen af ​​XML-fil, du parsererrssParser setShouldProcessNamespaces: NO;rssParser setShouldReportNamespacePrefixes: NO;rssParser setShouldResolveExternalEntities: NO;rssParser parse;}

Denne funktion instruerer motoren til at downloade en fil på en bestemt webadresse (URL) og starte processen til parsering af den. Vi fortæller den eksterne server, at vi er Safari, der kører på Mac, bare hvis serveren forsøger at omdirigere iPhone / iPad til en mobilversion.Indstillingerne i slutningen er specifikke for visse XML-filer. De fleste RSS-filer og generiske XML-filer behøver ikke, at de er slået til.

- (void) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {NSString * errorString = NSString stringWithFormat: @ "Fejlkode% i", parseError code;NSLog (@ "Fejl parsing XML:% @", errorString);errorParsing = JA;}Dette er en simpel fejlkontrolruting, der angiver en binær værdi, hvis den oplever en fejl. Du kan muligvis have noget mere specifikt her afhængigt af hvad du laver. Hvis du simpelthen behøver at køre nogle kode efter behandling i tilfælde af fejl, kan den binære variabel fejlParsing kaldes på det tidspunkt.

- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName attributter: (NSDictionary *) attributeDict {currentElement = elementName copy;ElementValue = NSMutableString alloc init;hvis (elementName isEqualToString: @ "item") {item = NSMutableDictionary alloc init;}} Kødet i XML-parseren indeholder tre funktioner, som kører i begyndelsen af ​​et enkelt element, en der kører i midten af ​​parsing af elementet, og en der kører i slutningen af ​​elementet.

I dette eksempel analyserer vi en fil som ligner RSS-filer, der nedbryder elementer i grupper under overskriften "poster" i XML-filen. Ved starten af ​​behandlingen kontrollerer vi elementnavnet "item" og tildeler vores vareordbog, når en ny gruppe er registreret. Ellers initialiserer vi vores variabel for værdien.

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) streng {ElementValue appendString: streng;}

Dette er den nemme del. Når vi finder tegn, tilføjer vi dem blot til vores variabel "ElementValue".

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {hvis (elementName isEqualToString: @ "item") {artikler addObject: item copy;} ellers {item setObject: ElementValue forKey: elementName;}}

Når vi er færdige med at behandle et element, skal vi gøre en af ​​to ting: (1) Hvis endeelementet er "element", er vi færdige med vores gruppe, så vi tilføjer vores ordbog til vores udvalg af "artikler" ". Eller (2) hvis elementet ikke er "element", sætter vi værdien i vores ordbog med en nøgle, der matcher elementets navn. (Dette betyder, at vi ikke har brug for en individuel variabel for hvert felt i XML-filen. Vi kan behandle dem lidt mere dynamisk.)

- (void) parserDidEndDocument: (NSXMLParser *) parser {hvis (errorParsing == NO){NSLog (@ "XML-behandling færdig!");} ellers {NSLog (@ "Fejl opstod under XML-behandling");}}

Dette er den sidste funktion, der er nødvendig for vores parsningsrutine. Det afsluttes blot dokumentet. Du vil lægge en kode, du vil afslutte processen her eller noget specielt, du måske vil gøre i tilfælde af fejl.

En ting, mange apps måske vil gøre her er at gemme data og / eller XML-filen til en fil på enheden. På den måde, hvis brugeren ikke er tilsluttet internettet næste gang de indlæser appen, kan de stadig få disse oplysninger.

Selvfølgelig kan vi ikke glemme den vigtigste del: fortælle din ansøgning om at analysere filen (og give den en webadresse for at finde den på!).

For at starte processen skal du blot tilføje denne linje kode til det rette sted, hvor du vil gøre XML-behandling:

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