Kaip analizuoti XML failus Xcode

click fraud protection

Nors ir įmontuotas XML analizatorius prideda tikrą vertę naujai stalinio kompiuterio ar mobiliajai programai, koduodamas tą funkcionalumą, paprastai reikalauja daug kūrimo laiko ir beta testavimo. „Apple“ „Xcode“ programoje yra XML analizatorius, apeinantis didžiąją dalį šio rankinio darbo.

An XML faile gali būti viskas, pradedant pagrindiniais jūsų programos duomenimis ir baigiant RSS sklaidos kanalas tinklalapiui. Tai taip pat gali būti puikus būdas atnaujinti informaciją programoje nuotoliniu būdu, tokiu būdu apeinant poreikį „Apple“ pateikti naują dvejetainį failą, norint paprasčiausiai įtraukti naują elementą į sąrašą.

„Xcode“ procesas

Integruotame „Xcode“ procese pateikiami veiksmai, kaip inicijuoti naudotinus kintamuosius, pradėti XML analizatoriaus procesą, šiam procesui tiekti failą, įvertinti atskirus elementus ir simbolius (vertę) šiuose elementuose, atpažinti atskiro elemento pabaigą ir nutraukti analizavimą procesą.

Naudokite XML analizatorių

Norėdami iliustruoti išsamią informaciją, analizuosime failo pavyzdį iš interneto, perduodami jam tam tikrą interneto adresą (

instagram viewer
URL).

Pradėkite kurti antraštės failą. Tai yra labai paprasto išsamios peržiūros valdiklio antraštės failo, kuriame pateikti minimalūs mūsų failo analizavimo reikalavimai, pavyzdys:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;
NSXMLParser * rssParser;
NSMutableArray * straipsniai;
NSMutableDictionary * elementas;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL klaidaParsinimas;
}
@property (nonatomic, retain) IBOutlet DetailViewController * detailViewController;
- (negaliojantis) parseXMLFileAtURL: (NSString *) URL;


Funkcija parseXMLFileAtURL pradeda procesą. Kai jis baigsis, „NSMutableArray“ „straipsniuose“ laikomi duomenys. Masyvą sudaro keičiami žodynai su raktais, susijusiais su laukų pavadinimais XML faile.

Tada pradėkite procesą:

- (void) parserDidStartDocument: (NSXMLParser *) analizatorius {
NSLog (@ "Failas rastas ir pradėtas analizuoti");
}

Ši funkcija veikia proceso pradžioje. Nereikia nieko dėti į šią funkciją, bet jei norite atlikti užduotį, kai failas pradedamas analizuoti, tai jūs įdėsite savo kodą.

Nurodykite programai ką nors atsisiųsti

Tada nurodykite programai ką nors atsisiųsti:

- (negaliojantis) parseXMLFileAtURL: (NSString *) URL
{
NSString * agentString = @ "Mozilla / 5.0 („ Macintosh “; U; „Intel Mac OS X 10_5_6“; lt) „AppleWebKit“ / 525.27.1 (KHTML, pvz., „Gecko“) versija / 3.2.1 „Safari“ / 525.27.1 ";
NSMutableURLRequest * užklausa = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[užklausa setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: užklausa returningResponse: nulio klaida: nulis];
straipsniai = [[NSMutableArray paskirstyti] init];
errorParsing = NE;
rssParser = [[NSXMLParser paskirstymas] initWithData: xmlFile];
[rssParser setDelegate: self];
// Jums gali tekti įjungti kai kuriuos iš jų, atsižvelgiant į XML failo, kurį analizuojate, tipą
[rssParser setShouldProcessNamespaces: NE];
[rssParser setShouldReportNamespacePrefixes: NE];
[rssParser setShouldResolveExternalEntities: NE];
[rssParser analizuoti];
}


Ši funkcija nurodo varikliui atsisiųsti failą tam tikru interneto adresu (URL) ir pradėti jo analizavimo procesą. Nuotoliniam serveriui sakome, kad esame „Safari“, veikiantis „Mac“, tik tuo atveju, jei serveris bandys peradresuoti „iPhone“ / „iPad“ į mobiliąją versiją.

Pabaigos parinktys yra būdingos tam tikriems XML failams. Daugumai RSS failų ir bendrųjų XML failų jų nereikės įjungti.

Klaida - patikrinkite rezultatą

Atlikite keletą pagrindinių rezultatų patikrinimų:

- (negaliojantis) analizatorius: (NSXMLParser *) analizatoriaus parseErrorOccurrent: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Klaidos kodas% i", [parseError kodas]];
NSLog (@ "Klaida analizuojant XML:% @", errorString);
errorParsing = TAIP;
} Šis klaidų tikrinimo maršrutas nustato dvejetainę vertę, jei aptinka klaidą. Jums gali prireikti kažko konkretesnio, atsižvelgiant į tai, ką darote. Jei klaidos atveju po apdorojimo tiesiog reikia paleisti kodą,


Ši klaidų tikrinimo procedūra nustato dvejetainę vertę, jei ji aptinka klaidą. Jums gali prireikti kažko konkretesnio, atsižvelgiant į tai, ką darote. Jei klaidos atveju po apdorojimo tiesiog reikia paleisti kodą, tuo metu galima iškviesti klaidą analizuojant dvejetainį kintamąjį.

Analizuokite gautą turinį

Tada programa suskirsto gautą turinį ir jį analizuoja:

- (negaliojantis) analizatorius: (NSXMLParser *) analizatorius didStartElement: (NSString *) elementName vardų sritisURI: (NSString *) vardų sritisURI kvalifikuojamasName: (NSString *) qName atributai: (NSDictionary *) attributeDict {
currentElement = [elementNAME copy];
ElementValue = [[NSMutableString paskirstyti] init];
if ([elementName isEqualToString: @ "item"]) {
elementas = [[NSMutableDictionary paskirst] init];
}
}


XML analizatoriaus mėsoje yra trys funkcijos, viena vykdoma individo pradžioje elementas, kuris veikia analizuojant elementą viduryje, ir tas, kuris eina elemento pabaigoje elementas.

Šiame pavyzdyje išanalizuosime failą, panašų į RSS failus, kurie suskirsto elementus į grupes daiktų XML faile. Apdorojimo pradžioje mes tikriname elemento pavadinimą "elementas" ir paskirstome savo elementų žodyną, kai aptinkama nauja grupė. Kitu atveju mes inicijuojame kintamąjį pagal vertę:

- (negaliojantis) analizatorius: [NSXMLParser *] rastas analizatorius. Simboliai: (NSString *) eilutė {
[ElementValue appendString: string];
}


Radę simbolių, juos paprasčiausiai įtraukiame į savo kintamąjį ElementValue:

- (negaliojantis) analizatorius: [NSXMLParser *] analizatorius padarė
if ([elementName isEqualToString: @ "item"]) {
[straipsniai addObject: [daikto kopija]];
} Kitas {
[item setObject: ElementValue forKey: elementNAME];
}
}

Kas atsitinka, kai analizavimas baigtas

Kai programa baigia apdoroti elementą, ji turi atlikti vieną iš dviejų dalykų:

  • Jei galinis elementas yra elementą, mes baigėme savo grupę, todėl savo straipsnių rinkinyje pridėsime savo žodyną.
  • Jei elementas nėra elementą, mes nustatysime vertę savo žodyne su raktu, kuris atitinka elemento pavadinimą. (Tai reiškia, kad kiekvienam XML failo laukui nereikia atskiro kintamojo. Mes galime juos apdoroti šiek tiek dinamiškiau.)

Tai paskutinė funkcija, reikalinga mūsų analizės rutinai; tai baigia dokumentą. Čia įdėkite bet kokį galutinį kodą arba nurodykite klaidą taisantį paprogramę:

- (negaliojantis) parserDidEndDocument: (NSXMLParser *) analizatorius {
jei (errorParsing == NE)
{
NSLog (@ "XML apdorojimas baigtas!");
} Kitas {
NSLog (@ "Klaida įvyko apdorojant XML");
}
}

Išsaugokite duomenis

Vienas dalykas, kurį daugelis programų gali norėti padaryti, yra išsaugoti duomenis arba XML failą įrenginio faile. Tokiu būdu, jei kitą kartą įkeliant programą įrenginys nėra prijungtas prie interneto, jis vis tiek gali gauti šią informaciją.

Žinoma, negalime pamiršti ir svarbiausios dalies: liepdami programai išanalizuoti failą (ir nurodydami interneto adresą, kad jį rastumėte!). Norėdami pradėti procesą, pridėkite šią kodo eilutę reikiamoje vietoje, kur norite atlikti XML apdorojimą:

 [savarankiškai parseXMLFileAtURL: @ " http://www.webaddress.com/file.xml"]; 
instagram story viewer