XML файлдарын Xcode-де қалай анықтауға болады

Көптеген қолданбалардың негізі болып табылатын бір қарапайым тапсырма - XML ​​файлдарын талдау мүмкіндігі. Және, бақытымызда, Xcode XML файлын Objective-C-де талдауға оңай етеді.

XML файлы сіздің қолданбаңыз туралы негізгі деректерден веб-сайтқа арналған RSS арнасына дейін ештеңені қамтуы мүмкін. Сондай-ақ, олар сіздің бағдарламаңыздағы ақпаратты қашықтан жаңартудың керемет әдісі бола алады, осылайша тізімге жаңа элементті қосу үшін жаңа екі жақты «Apple» -ге жіберу қажет.

XML файлдарын Xcode-де қалай өңдейміз? Бұл процесте айнымалы мәндерді инициализациялау, XML талдаушы процесін бастау, файлды өңдеу, жеке элементтің басталуы, элемент ішіндегі таңбалар (мән) жеке элементтің соңы және талдау процесінің аяқталуы.

Бұл мысалда интернеттен нақты веб-мекен-жайы ( URL ) арқылы файлды талдау жүргізіледі.

Тақырып файлын құрудан бастаймыз. Бұл файлды талдау үшін ең төменгі талаптары бар Толық көрініс контроллері үшін өте негізгі тақырып файлының мысалы болып табылады:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * мақалалар;
NSMutableDictionary * элемент;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL қателігі;
}

@property (nonatomic, retain) IBOutlet DetailViewController * detailViewController;

- (void) parseXMLFileAtURL: (NSString *) URL;

ParseXMLFileAtURL функциясы біз үшін процесті бастайды. Ол аяқталғаннан кейін NSMutableArray «мақалалары» біздің деректерімізді сақтайды. Массив XML файлындағы өріс атауларымен байланысты пернелермен айнымалы сөздіктерден тұрады.

Енді қажетті айнымалы мәндерді орнатқан болсақ, біз .m файлындағы процесті кездестіреміз:

- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ «Файл табылды және талдау басталды»);

}

Бұл функция процестің басында іске қосылады. Бұл функцияға ештеңе қоюдың қажеті жоқ, бірақ егер файлды талдауға бастағанда тапсырманы орындағыңыз келсе, кодты қоюға болады.

- (void) parseXMLFileAtURL: (NSString *) URL мекенжайы
{

NSString * agentString = @ «Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, Gecko сияқты) / 3.2.1 Safari / 525.27.1»;
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[сұрау setValue: agentString forHTTPHeaderField: @ «User-Agent»];
xmlFile = [NSURLConnection sendSynchronousRequest: сұрауды қайтаруResponse: nil error: nil];


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

rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: өзін];

// Талап етілетін XML файлының түріне қарай, олардың кейбіреулерін айналдыру қажет болуы мүмкін
[rssParser setShouldProcessNamespaces: ЖОҚ];
[rssParser setShouldReportNamespacePrefixes: ЖОҚ];
[rssParser setShouldResolveExternalEntities: ЖОҚ];

[rssParser талдауы];

}

Бұл функция қозғалтқышқа белгілі бір веб-мекенжайға (URL) файлды жүктеуді және оны талдау үшін процесті бастауды тапсырады.

Біз серверді iPhone / iPad- ды жылжымалы нұсқаға қайта бағыттауға тырысқан жағдайда, қашықтағы серверге біз Mac-де жұмыс істейтін Safari деп айтады.

Соңында опциялар кейбір XML файлдарына тән. Көптеген RSS файлдары мен генерикалық XML файлдары оларды қосуға мұқтаж емес.

- (void) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ «Қате коды% i», [parseError code]];
NSLog (@ «XML талдау:% @» қатесі, errorString);


errorParsing = YES;
}

Бұл қате тапса, екілік мәнді орнататын қарапайым қателерді тексеру маршрутизациясы. Сіз не істеп жатқаныңызға байланысты осында нақты нәрсе қажет болуы мүмкін. Егер сіз қателіктер жағдайында өңдеуден кейін бірнеше кодты іске қосуыңыз қажет болса, онда қатеParsing екілік айнымалы мәнді сол кезде шақыруға болады.

(NSString *) аттар кеңістігіName атрибуты: (NSString *) namespaceURI qualifiedName: (NSString *) qName атрибуттары: (NSDictionary *) attributeDict {
currentElement = [elementName copy];
ElementValue = [[NSMutableString alloc] init];
if ([elementName isEqualToString: @ «item»]) {
item = [[NSMutableDictionary alloc] init];

}

}

XML талдаушысының еті үш элементті қамтиды: бір элемент басында жұмыс істейтін, біреуі элементті талдаудың ортасында жүреді, ал біреуі элементтің соңында жұмыс істейді.

Бұл мысал үшін XML файлындағы «элементтер» тақырыбының астындағы элементтерді топтарға бөлетін RSS файлдарына ұқсас файлды талдаймыз. Өңдеудің басында элементтің «item» элементін тексеріп, жаңа топ анықталған кезде, біз сөздік сөздігін бөліп аламыз. Әйтпесе, айнымалы мәнді мәнге келтіреміз.

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) string {
[ElementValue appendString: жол];
}

Бұл жеңіл бөлігі. Таңбаларды тапқан кезде біз оларды «ElementValue» айнымалысына қосамыз.

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) элементName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
if ([elementName isEqualToString: @ «item»]) {
[article addObject: [item copy]];
} else {
[item setObject: ElementValue forKey: elementName];
}

}

Элементті өңдеуді аяқтағаннан кейін, біз екі нәрсенің бірін жасауымыз керек: (1) егер соңғы элемент «элемент» болса, біз өз тобымызды аяқтадық, сондықтан біздің сөздікті «біздің мақалаларымызға қосамыз» «.

Немесе (2) егер элемент «элемент» болмаса, біз сөздігіміздегі мәнді элементтің атына сәйкес келетін кілтті орнатамыз. (XML файлы ішіндегі әр өріс үшін жеке айнымалы мәнге мұқтаж емеспіз, оларды аздап динамикалық өңдеуге болады.)

- (void) parserDidEndDocument: (NSXMLParser *) parser {

егер (errorParsing == NO)
{
NSLog (@ «XML өңдеу орындалды!»);
} else {
NSLog (@ «XML өңдеу кезінде қате пайда болды»);
}

}

Бұл біздің талдау әдісі үшін қажетті соңғы функция. Ол жай ғана құжатты аяқтайды. Процесті аяқтағыңыз келген кез-келген кодты немесе сіз қателесіп қалуыңыз мүмкін ерекше нәрсені енгізесіз.

Көптеген қолданбалардың біреуі деректерді және / немесе XML файлды құрылғыдағы файлға сақтау үшін осында істеуді қалауы мүмкін. Осылайша, егер пайдаланушы қосымша жүктеп жатқанда, Интернетке қосылмаса, олар бұл ақпаратты ала алады.

Әрине, біз ең маңызды бөлігін ұмыта алмаймыз: файлыңызды талдауға өтінішіңізді келтіріңіз (оны табу үшін веб-адресіңізді беріңіз!).

Процесті бастау үшін кодты осы жолды XML өңдеуді орындағыңыз келетін орынға қосу керек:

[parseXMLFileAtURL: @ «http://www.webaddress.com/file.xml»];