Kaut arī iebūvēts XML parsētājs piešķir reālu vērtību jaunai darbvirsmas vai mobilajai lietojumprogrammai, kodējot šo funkcionalitāti, parasti nepieciešams daudz izstrādes laika un beta testēšanas. Apple Xcode programma ietver XML parsētāju, kas apiet lielāko daļu šī manuālā darba.
An XML fails var saturēt visu, sākot no pamatdatiem par jūsu lietotni un beidzot ar RSS plūsma vietnei. Tie var būt arī lielisks veids, kā attālināti atjaunināt informāciju jūsu lietotnē, tādējādi apejot nepieciešamību Apple iesniegt jaunu bināru failu, lai vienkārši pievienotu jaunu vienumu sarakstam.
Xcode process
Iebūvētais Xcode process satur darbības, lai inicializētu izmantojamos mainīgos, sāktu XML parsētāja procesu, ievadītu šo procesu failā, atsevišķu elementu un rakstzīmju (vērtības) novērtēšana šajos elementos, atsevišķa elementa beigu atpazīšana un parsēšanas pārtraukšana process.
Izmantojiet XML parsētāju
Lai ilustrētu informāciju, mēs parsēsim faila paraugu no interneta, nododot tam noteiktu tīmekļa adresi (URL).
Sāciet ar galvenes faila izveidi. Šis ir detalizēta skata kontroliera ļoti vienkārša galvenes faila piemērs ar minimālajām prasībām mūsu faila parsēšanai:
@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;
NSXMLParser * rssParser;
NSMutableArray * raksti;
NSMutableDictionary * vienums;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL kļūdaParādošana;
}
@property (nonatomic, retain) IBOutlet DetailViewController * detailViewController;
- (void) parseXMLFileAtURL: (NSString *) URL;
Funkcija parseXMLFileAtURL sāk procesu. Kad tas ir pabeigts, NSMutableArray "raksti" glabā datus. Masīvs sastāv no maināmām vārdnīcām ar atslēgām, kas saistītas ar lauku nosaukumiem XML failā.
Pēc tam inicializējiet procesu:
- (void) parserDidStartDocument: (NSXMLParser *) parsētājs {
NSLog (@ "Fails atrasts un sākta parsēšana");
}
Šī funkcija darbojas procesa sākumā. Šajā funkcijā nekas nav jāievieto, bet, ja vēlaties veikt uzdevumu, kad fails tiek parsēts, šeit ievietosiet kodu.
Uzdodiet programmai kaut ko lejupielādēt
Pēc tam norādiet programmai kaut ko lejupielādēt:
- (void) parseXMLFileAtURL: (NSString *) URL
{
NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; lv-lv) AppleWebKit / 525.27.1 (KHTML, piemēram, Gecko) Versija / 3.2.1 Safari / 525.27.1 ";
NSMutableURLRequest * pieprasījums = [NSMutableURLRequest pieprasījums ar URL:
[NSURL URLWithString: URL]];
[pieprasījums setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: pieprasījums returningResponse: nulle kļūda: nulle];
raksti = [[NSMutableArray piešķirt] init];
errorParsing = NĒ;
rssParser = [[NSXMLParser piešķīrums] initWithData: xmlFile];
[rssParser setDelegate: self];
// Jums, iespējams, būs jāpagriež daži no tiem atkarībā no XML faila veida, kuru analizējat
[rssParser setShouldProcessNamespaces: NĒ];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NĒ];
[rssParser parsēšana];
}
Šī funkcija dod rīkam motoram lejupielādēt failu uz noteiktu tīmekļa adresi (URL) un sākt tā parsēšanas procesu. Attālajam serverim mēs sakām, ka mēs esam Safari, kas darbojas uz Mac, tikai gadījumā, ja serveris mēģina novirzīt iPhone / iPad uz mobilo versiju.
Iespējas beigās ir raksturīgas noteiktiem XML failiem. Lielākajai daļai RSS failu un vispārējiem XML failiem tie nebūs jāieslēdz.
Kļūda - pārbaudiet rezultātu
Veiciet dažus pamata kļūdu pārbaudes rezultātus:
- (void) parsētājs: (NSXMLParser *) parsētāja parseErrorOccurrent: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Kļūdas kods% i", [parseError kods]];
NSLog (@ "Kļūda parsējot XML:% @", errorString);
errorParsing = YES;
} Šī kļūdu pārbaudes maršrutēšana nosaka bināro vērtību, ja tā sastopas ar kļūdu. Jums var būt nepieciešams kaut kas konkrētāks, atkarībā no tā, ko jūs darāt. Ja kļūdas gadījumā pēc apstrādes jums vienkārši jāpalaiž kods,
Šī kļūdu pārbaudes kārtība nosaka bināro vērtību, ja tā sastopas ar kļūdu. Jums var būt nepieciešams kaut kas konkrētāks, atkarībā no tā, ko jūs darāt. Ja kļūdas gadījumā pēc apstrādes vienkārši jāpalaiž kāds kods, tajā laikā var izsaukt kļūdas parsēšanas bināro mainīgo.
Analizējiet izgūto saturu
Pēc tam programma sadala izgūto saturu un analizē to:
- (void) parsētājs: (NSXMLParser *) parsētājs didStartElement: (NSString *) elementName nosaukumvietaURI: (NSString *) nosaukumvietaURI kvalificētsName: (NSString *) qName atribūti: (NSDictionary *) attributeDict {
currentElement = [elementsName copy];
ElementValue = [[NSMutableString piešķirt] init];
if ([elementName isEqualToString: @ "item"]) {
vienums = [[NSMutableDictionary piešķirt] init];
}
}
XML parsētāja gaļa satur trīs funkcijas, vienu, kas darbojas indivīda sākumā elements, kas darbojas elementa parsēšanas vidū, un tāds, kas darbojas elementa beigās elements.
Šajā piemērā mēs parsēsim failu, kas ir līdzīgs RSS failiem, kuri sadaļas elementus sadala grupās preces XML failā. Apstrādes sākumā mēs pārbaudām elementa nosaukumu "item" un piešķiram mūsu vienumu vārdnīcu, kad tiek atklāta jauna grupa. Pretējā gadījumā mēs inicializējam mūsu mainīgo vērtībai:
- (void) parsētājs: (NSXMLParser *) atrasts parsētājsRakstzīmes: (NSString *) virkne {
[ElementValue appendString: virkne];
}
Atrodot rakstzīmes, mēs tās vienkārši pievienojam savam mainīgajam ElementValue:
- (void) parsētājs: (NSXMLParser *) parsētājs didEndElement: (NSString *) elementName nosaukumvietaURI: (NSString *) nosaukumvietaURI kvalificētsName: (NSString *) qName {
if ([elementName isEqualToString: @ "item"]) {
[raksti addObject: [vienuma kopija]];
} cits
[item setObject: ElementValue forKey: elementNAME];
}
}
Kas notiek, kad parsēšana ir pabeigta
Kad programma pabeidz elementa apstrādi, tai jāveic viena no divām darbībām:
- Ja beigu elements ir lieta, mēs esam pabeiguši savu grupu, tāpēc mēs pievienosim savu vārdnīcu savam rakstu klāstam.
- Ja elements nav lieta, mēs iestatīsim vērtību mūsu vārdnīcā ar atslēgu, kas atbilst elementa nosaukumam. (Tas nozīmē, ka katram laukam XML failā mums nav nepieciešams atsevišķs mainīgais. Mēs tos varam apstrādāt nedaudz dinamiskāk.)
Šī ir pēdējā funkcija, kas nepieciešama mūsu parsēšanas rutīnai; tas beidz dokumentu. Ievietojiet šeit jebkuru gala kodu vai norādiet kļūdu labojošu apakšprogrammu:
- (void) parserDidEndDocument: (NSXMLParser *) parsētājs {
ja (errorParsing == NĒ)
{
NSLog (@ "XML apstrāde pabeigta!");
} cits
NSLog (@ "Kļūda radās XML apstrādes laikā");
}
}
Saglabājiet datus
Viena lieta, ko daudzas lietotnes šeit varētu vēlēties darīt, ir datu vai XML faila saglabāšana ierīces failā. Tādā veidā, ja ierīce nav savienota ar internetu nākamajā lietotnes ielādes reizē, tā joprojām var iegūt šo informāciju.
Protams, mēs nevaram aizmirst vissvarīgāko daļu: pateikt lietojumprogrammai parsēt failu (un norādīt tīmekļa adresi, lai to atrastu!). Lai sāktu procesu, pievienojiet šo koda rindu attiecīgajā vietā, kur vēlaties veikt XML apstrādi:
[self parseXMLFileAtURL: @ " http://www.webaddress.com/file.xml"];