Kuigi sisseehitatud XML parser lisab uuele töölauale või mobiilirakendusele tõelist väärtust, selle funktsionaalsuse kodeerimine nõuab tavaliselt palju arendusaega ja beetatestimist. Apple'i Xcode-programm sisaldab XML-parserit, mis möödub suuremast osast sellest käsitsitööst.
An XML fail võib sisaldada kõike, alates teie rakenduse põhiandmetest kuni RSS-voog veebisaidi jaoks. Need võivad olla ka suurepärane viis teie rakenduses teabe kauguuendamiseks, vältides seeläbi vajadust esitada Apple'ile uus binaarne lihtsalt uue üksuse lisamiseks loendisse.
Xkoodi protsess
Sisseehitatud Xcode protsess sisaldab juhiseid kasutatavate muutujate lähtestamiseks, XML-parseri protsessi käivitamiseks, selle protsessi sisestamiseks faili, üksikute elementide ja nende elementide märkide (väärtuse) hindamine, üksiku elemendi lõpu äratundmine ja sõelumise lõpetamine protsess.
Kasutage XML-i parserit
Üksikasjade illustreerimiseks parsime Internetist näidisfaili, edastades sellele kindla veebiaadressi (URL).
Alustage päisefaili ehitamisest. See on näide detailvaate kontrolleri väga lihtsast päisefailist, kus on meie faili parsimise miinimumnõuded:
@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;
NSXMLParser * rssParser;
NSMutableArray * artiklid;
NSMutableDictionary * üksus;
NSString * currentElement;
NSMutableString * ElementValue;
BOOLi vigaParseerimine;
}
@omand (nonatomic, retain) IBOutlet DetailViewController * detailViewController;
- (void) parseXMLFileAtURL: (NSString *) URL;
Funktsioon parseXMLFileAtURL käivitab protsessi. Kui see on lõpule jõudnud, hoiavad NSMutableArray "artiklid" andmeid. Massiiv koosneb muudetavatest sõnastikest koos võtmetega, mis on seotud XML-faili väljade nimedega.
Seejärel lähtestage protsess:
- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Fail on leitud ja parsimine algas");
}
See funktsioon töötab protsessi alguses. Sellesse funktsiooni pole vaja midagi lisada, kuid kui soovite toimingu sooritada siis, kui faili hakatakse parsima, siis paneksite koodi sinna.
Juhendage programmi midagi alla laadima
Järgmisena andke programmis käsk midagi alla laadida:
- (void) parseXMLFileAtURL: (NSString *) URL
{
NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; et-et) AppleWebKit / 525.27.1 (KHTML, nagu Gecko) Versioon / 3.2.1 Safari / 525.27.1 ";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: taotlus returningResponse: nullviga: null];
artiklid = [[NSMutableArray eraldus] init];
errorParsing = EI;
rssParser = [[NSXMLParseri eraldus] initWithData: xmlFile];
[rssParser setDelegate: ise];
// Sõltuvalt parsitava XML-faili tüübist peate võib-olla mõned neist keerama
[rssParser setShouldProcessNamespaces: EI];
[rssParser setShouldReportNamespacePrefixes: EI];
[rssParser setShouldResolveExternalEntities: EI];
[rssParser sõelumine];
}
See funktsioon käsib mootoril fail alla laadida konkreetselt veebiaadressilt (URL) ja alustada selle sõelumist. Me ütleme kaugserverile, et oleme Macis töötav Safari igaks juhuks, kui server proovib iPhone'i / iPadi ümber suunata mobiiliversioonile.
Lõpus olevad valikud on spetsiifilised teatud XML-failidele. Enamik RSS-faile ja üldisi XML-faile ei vaja neid sisse lülitamist.
Viga - kontrollige tulemust
Tehke tulemuse osas mõned põhilised veakontrollid:
- (void) parser: (NSXMLParser *) parser parseErrorOccused: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Veakood% i", [parseError code]];
NSLog (@ "Viga XML-i parsimisel:% @", errorString);
errorParsing = JAH;
} See tõrke kontrollimise marsruutimine määrab kahendväärtuse, kui see ilmneb vea korral. Siin võib vaja minna midagi konkreetsemat, sõltuvalt sellest, mida teete. Kui peate vea korral pärast töötlemist lihtsalt mõne koodi käivitama,
See tõrke kontrollimise rutiin määrab kahendväärtuse, kui see tõrke ilmneb. Siin võib vaja minna midagi konkreetsemat, sõltuvalt sellest, mida teete. Kui peate tõrke korral pärast töötlemist lihtsalt mõne koodi käivitama, saab sel ajal kutsuda kahendmuutuja parsimise vea.
Analüüsige hangitud sisu
Järgmisena lagundab programm allalaaditud sisu ja analüüsib seda:
- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName nimeruumURI: (NSString *) nimeruumURI kvalifitseeritudNimi: (NSString *) qName atribuudid: (NSDictionary *) attributeDict {
currentElement = [koopia elementNime];
ElementValue = [[NSMutableString eraldus] init];
if ([elemendiNimi onEqualToString: @ "element"]) {
kirje = [[NSMutableDictionary erald] init];
}
}
XML-parseri liha sisaldab kolme funktsiooni, üks töötab üksiku alguses element, üks, mis töötab elemendi parsimise keskel, ja üks, mis jookseb elemendi lõpus element.
Selle näite jaoks analüüsime RSS-failidega sarnast faili, mis jaotab elemendid rühmadeks jaotise all esemed XML-failis. Töötlemise alguses kontrollime uue rühma tuvastamisel elemendi nime "element" ja eraldame oma üksuste sõnastiku. Vastasel juhul lähtestame muutuja väärtuseks:
- (void) parser: (NSXMLParser *) parser leitud Characters: (NSString *) string {
[ElementValue appendString: string];
}
Kui leiame märke, lisame need lihtsalt oma muutujasse ElementValue:
- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName nimeruumURI: (NSString *) nimeruumURI kvalifitseeritudName: (NSString *) qName {
if ([elemendiNimi onEqualToString: @ "element"]) {
[artiklid addObject: [üksuse koopia]];
} muu {
[item setObject: ElementValue forKey: elementNimi];
}
}
Mis juhtub, kui parsimine on lõpule jõudnud
Kui programm on elemendi töötlemise lõpetanud, peab ta tegema ühte kahest toimingust:
- Kui lõpuelement on üksus, oleme oma rühma lõpetanud, nii et lisame oma sõnastiku artiklite hulka.
- Kui element pole üksus, määrame oma sõnastikus väärtuse võtmega, mis sobib elemendi nimega. (See tähendab, et me ei vaja XML-faili igale väljale eraldi muutujat. Saame neid natuke dünaamilisemalt töödelda.)
See on meie sõelumisrutiini jaoks vajalik viimane funktsioon; sellega dokument lõpeb. Pange siia lõplik kood või määrake veaparandus alamprogramm:
- (void) parserDidEndDocument: (NSXMLParser *) parser {
kui (errorParsing == EI)
{
NSLog (@ "XML-i töötlemine on tehtud!");
} muu {
NSLog (@ "XML-i töötlemisel ilmnes viga");
}
}
Salvestage andmed
Üks asi, mida paljud rakendused võiksid siin teha, on andmete või XML-faili salvestamine seadme faili. Nii saab seade, kui järgmine kord rakendust laaditakse, Interneti-ühenduse loomisel selle teabe juurde saada.
Muidugi ei saa me unustada kõige olulisemat osa: käskida oma rakendusel faili sõeluda (ja anda sellele veebiaadress, et see üles leida!). Protsessi alustamiseks lisage see koodirida sobivasse kohta, kus soovite XML-i töödelda:
[ise parseXMLFileAtURL: @ " http://www.webaddress.com/file.xml"];