Kā Pārvērst XML failus Xcode

Viens vienkāršs uzdevums, kas ir daudzu lietotņu mugurkauls, ir spēja analizēt XML failus. Un, par laimi, Xcode ļauj salīdzinoši viegli pārskatīt XML failu Objective-C.

XML fails var saturēt neko no pamata datiem par jūsu lietotni vietnes RSS barotnei . Tās var arī būt lielisks veids, kā attālināti atjaunināt informāciju savā lietotnē, tādējādi apejot nepieciešamību iesniegt jaunu bināro versiju, lai vienkārši pievienotu jaunu objektu sarakstam.

Tātad, kā mēs apstrādājam XML failus Xcode? Process ietver pasākumus, lai inicializētu izmantojamus mainīgos, uzsākot XML parsētājs, ievadot šo procesu kā failu, atsevišķa elementa sākumu, rakstzīmes (vērtību) elementā, atsevišķa elementa beigas un parsēšanas procesa beigas.

Šajā piemērā mēs analizēsim failu no interneta, nododot tam noteiktu tīmekļa adresi ( URL ).

Sāksim ar galvenes faila izveidi. Šis ir ļoti vienkāršas galvenes faila piemērs Detail View Controller ar minimālajām prasībām mūsu faila parsēšanai:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * raksti;
NSMutableDictionary * objekts;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL errorParsing;
}

@ īpašums (neatomisks, saglabāts) IBOutlet DetailViewController * detailViewController;

- (spēkā neesošs) parseXMLFileAtURL: (NSString *) URL;

ParseXMLFileAtURL funkcija sāks procesu mums. Kad tas beidzas, NSMutableArray "raksti" saglabās mūsu datus. Masīvs sastāv no maināmām vārdnīcām ar taustiņiem, kas saistīti ar lauka nosaukumiem XML failā.

Tagad, kad esam iestatījuši nepieciešamos mainīgos, mēs pārietam uz procesa atbilstību .m failā:

- (spēkā neesošs) parserDidStartDocument: (NSXMLParser *) parsētājs {
NSLog (@ "atrasts fails un sākts parsēšana");

}

Šī funkcija sākas procesa sākumā. Šajā funkcijā nav nepieciešams kaut ko ievietot, bet, ja vēlaties veikt uzdevumu, kad fails tiek sākts parsēt, tas ir tas, kur jūs varētu ievietot savu kodu.

- (spēkā neesošs) parseXMLFileAtURL: (NSString *) URL
{

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us); AppleWebKit / 525.27.1 (KHTML, piemēram, Gecko); Version / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * pieprasījums = [NSMutableURLRequest pieprasījumsWithURL:
[NSURL URLWithString: URL]];
[pieprasījums setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: pieprasījums returningResponse: nil kļūda: nulle];


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

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

/ / Iespējams, jums vajadzēs pārvērst dažus no šiem, atkarībā no XML faila veida, kuru analizējat
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[rssParser pars];

}

Šī funkcija dod rīkam motoram lejupielādēt failu konkrētā tīmekļa adresē (URL) un sākt to analizēt.

Mēs informējam attālo serveri, ka mēs esam Safari, kas darbojas Mac, tikai tad, 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ēju XML failu tiem nav jābūt ieslēgtiem.

- (spēkā neesošs) parsētājs: (NSXMLParser *) parser parseErrorOckurred: (NSError *) parse Error {

NSString * errorString = [NSString stringWithFormat: @ "Kļūdas kods% i", [parseError kods]];
NSLog (@ "Error parsing XML:% @", errorString);


errorParsing = YES;
}

Šī ir vienkārša kļūdu pārbaudes maršrutēšana, kas noteiks bināro vērtību, ja radīsies kļūda. Šeit var būt nepieciešams kaut kas konkrētāk atkarīgs no tā, ko jūs darāt. Ja kļūdas gadījumā vienkārši jāievada kods pēc apstrādes, bināro mainīgo kļūdas paziņojumu var izsaukt tajā laikā.

(NSString *) qName atribūti: (NSDictionary *) attributeDict {(NSS)
CurrentElement = [elementsName kopija];
ElementValue = [[NSMutableString alloc] init];
ja [(elementName isEqualToString: @ "item"]) {
objekts = [[NSMutableDictionary alloc] init];

}

}

XML parsētāja gaļai ir trīs funkcijas, kuras darbojas atsevišķa elementa sākumā, kas darbojas elementa parsēšanas vidū, un elementam, kas darbojas elementa beigās.

Šajā piemērā mēs analizēsim failu, kas ir līdzīgs RSS failiem, kuri XML faila postenī "vienumi" sadalīs elementus grupās. Pārstrādes sākumā mēs pārbaudām elementa nosaukumu "vienums" un piešķiram mūsu preces vārdnīcu, kad tiek atklāta jauna grupa. Pretējā gadījumā mēs vērtību inicializējam mūsu mainīgo.

- (spēkā neesošs) parsētājs: (NSXMLParser *) parsētājs atrasts Characters: (NSString *) string {
[ElementValue appendString: virkne];
}

Šī ir vienkāršā daļa. Kad mēs atrodam rakstzīmes, mēs vienkārši pievienojam tos mūsu mainīgajam elementam "ElementValue".

- (spēkā neesošs) parsētājs: (NSXMLParser *) parsētājs didEndElement: (NSString *) elementsName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
ja [(elementName isEqualToString: @ "item"]) {
[raksti addObject: [kopiju]];
} cits {
[item setObject: ElementValue forKey: elementName];
}

}

Kad esam pabeidzuši kāda elementa apstrādi, mums ir jādara viena no divām lietām: (1) ja gala elements ir "elements", mēs esam pabeidzuši mūsu grupu, tāpēc mēs pievienosim mūsu vārdnīcu mūsu "rakstu" masīvam "

Vai (2) ja elements nav "vienums", mūsu vārdnīcā vērtība tiks iestatīta ar atslēgu, kas atbilst elementa nosaukumam. (Tas nozīmē, ka mums nav nepieciešams atsevišķs mainīgais katram XML faila laukam. Mēs varam tos nedaudz dinamiski apstrādāt.)

- (spēkā neesošs) parserDidEndDocument: (NSXMLParser *) parsētājs {

ja (errorParsing == NO)
{
NSLog (@ "XML apstrāde pabeigta!");
} cits {
NSLog (@ "XML apstrādes laikā radās kļūda");
}

}

Šī ir pēdējā funkcija, kas nepieciešama mūsu parsēšanas rutīnai. Tas vienkārši pabeidz dokumentu. Jūs ievietosit jebkuru kodu, ar kuru vēlaties pabeigt procesu šeit, vai kaut ko īpašu, kuru jūs varētu vēlēties darīt, ja rodas kļūda.

Viena lieta, ko daudzas lietotnes varētu vēlēties darīt šeit, ir saglabāt datus un / vai XML failu ierīcē esošam failam. Tādā veidā, ja lietotājs nākamajā reizē, kad ielādēsit lietotni, nav izveidojis savienojumu ar internetu, viņi joprojām var piekļūt šai informācijai.

Protams, mēs nevaram aizmirst vissvarīgāko daļu: paziņot jūsu pieteikumu, lai parsētu failu (un norādot tai tīmekļa adresi, lai to atrastu!).

Lai sāktu procesu, jums vienkārši jāpievieno šī koda līnija attiecīgajā vietā, kur vēlaties veikt XML apstrādi:

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