Чӣ тавр якҷоя кардани файлҳои 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, нигоҳ доштани) IBOutlet DetailViewController * detailViewController;

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

Функсияи parseXMLFileAtURL раванди моро оғоз мекунад. Вақте ки ба охир мерасад, моддаҳои NSMutableArray маълумотҳои моро месанҷад. Тақсими матнҳо бо калидҳои алоқаманд бо номи майдонҳо дар файли XML сохта мешаванд.

Акнун, ки мо ба тағйирёбандаҳои зарурӣ ноил шудаем, мо ба вохӯрии раванди файли .m:

- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Файл пайдо шуд ва тафтиш карда шуд");

}}

Ин функсия дар оғози раванд идома дорад. Дар ин функсия ягон чизи лозим нест, аммо агар шумо мехоҳед вазифаро ҳангоми парванда оғоз намоед, ин ҷо шумо коди худро гузоред.

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

Одноклассники == "Mozilla / 5.0" (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[НПУРСКИШВАШШШШШШШШШШШШШШШШШШШШШШШШШШШШШ_
[request setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection SendSynchronousRequest: дархости бозгашт Раванди: хатоги нил: nil];


мақолаҳо = [[NSMutableArray ҷудо кардан] ташаббусӣ];
errorParsing = не;

rssParser = [[NSXMLParser ҷудо] initWithData: xmlFile];
[rssParser setDelegate: худӣ];

// Шумо бояд баъзе аз инҳоро вобаста ба намуди файли XML, ки шумо тафтиш мекунед
[rssParser setShouldSNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[rssParser парс];

}}

Ин функсия муҳаррикро мефиристад, то як файлро дар суроғаи вебсафҳаи махсус (URL) бор кунад ва раванди тафсири онро оғоз кунад.

Мо ба сервери дурдаст хабар медиҳем, ки мо Safari дар Mac кор карда истодаем, дар сурате, ки сервер кӯшиш мекунад, ки iPhone / iPad -ро ба версияи мобилӣ такмил диҳад.

Имкониятҳои дар охири махсус муайяншудаи файлҳои XML мебошанд. Аксари файлҳои RSS ва файлҳои генералии XML ба онҳо лозим нестанд.

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

NSString * errorString = [string string string: @ "Хато код Рамз% i", [коди пароли]];
NSLog (@ "Хато ҷудо кардани XML:% @", errorString);


errorParsing = ҲА;
}}

Ин роҳи интихоби хатои соддаест, ки арзиши оддиро муқаррар мекунад, агар он хатогии онро ҳал кунад. Ба шумо лозим аст, ки чизеро, ки шумо мекунед, чизи бештареро мушоҳида кунед. Агар шумо танҳо як рамзи коркардро дар ҳолати корӣ иҷро кардан лозим бошед, хатогии параметрҳои дутарафа метавонад дар он вақт даъват карда шавад.

- (void) parser: (NSXMLParser *) parser дода шудStartElement: (NSString *) elementName namespaceURI: (NSString *) Номи номуайян Номи: (NSString *) QName attributes: (NSDictionary *) attributeDisk {
currentElement = [нусхаи аслии];
ElementValue = [[NSMutableString allocition] ташаббуси];
Агар ([elementName isEqualToString: @ "item"]) {{
item = [[NSMutableDictionary ҷудо] ташаббуси];

}}

}}

Гӯшаи порнографияи XML се вазифаро дар бар мегирад, ки дар оғози унсури инфиродӣ кор мекунад, ки дар давоми миёнаи тафсири элементҳо, ки дар охири сатҳ давида мешавад.

Барои мисол, мо метавонем файлеро, ки ба файлҳои RSS-и монанд тақсим карда мешавад, ки унсурҳоро ба гурӯҳҳо дар зери унвони "унсурҳо" дар дохили файли XML вайрон кунед. Дар оғози корк мо ба унвони унсури унсури "item" тафтиш карда, лингвистикаи ҷузъии мо ҳангоми гуруҳи нав ошкор карда мешавад. Дар акси ҳол, мо барои тағир додани тағирёбандаи худ ба арзиш.

- (void) parser: (NSXMLParser *) Параграфи FoundCharacters: (NSString *) string {
[ElementValue appendString: string];
}}

Ин қисмати осон аст. Вақте ки мо аломатҳо пайдо мекунем, мо онҳоро ба тағйирёбии мо "ElementValue" илова мекунем.

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) номуайянӣ Номи: (NSString *) qName {
Агар ([elementName isEqualToString: @ "item"]) {{
[articles addObject: [нусхаи асл]];
} else {
[item setObject: ElementValue forKey: elementName];
}}

}}

Вақте ки мо кор кардани элементро ба анҷом расонидем, мо бояд як чизи зеринро иҷро кунем: 1) агар унсури охири "item" бошад, мо гурӯҳи худро ба анҷом расонидем, аз ин рӯ, ".

Ё (2) агар элемент "матн" набошад, мо ба тарҷумаи мо бо калидие, ки номҳои элементро дар бар мегирад, арзёбӣ мекунем. (Ин маънои онро дорад, ки мо барои ҳар як майдон дар дохили файли XML ягон тағйироти инфиродӣ ниёз надорем. Мо метавонем онҳоро каме динамикиро ба кор барем.)

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

агар (errorParsing == не)
{{
NSLog (@ "коркарди XML!");
} else {
NSLog (@ "Хатогӣ ҳангоми коркарди XML");
}}

}}

Ин вазифаи охирини барои фарогирии фарогирии мо зарур аст. Ин ҳуҷҷатро тамом мекунад. Шумо ҳар кодекси шумо мехоҳед, ки раванди ин ё он чизеро, ки шумо мехоҳед дар ҳолати хато кор кардан мехоҳед, ба анҷом расонед.

Як чизи бисёр барномаҳо метавонанд дар ин ҷо кор кардан мехоҳанд, ки маълумот ва / ё файли XML ба файл дар дастгоҳ. Дар ин ҳолат, агар истифодабаранда ба Интернет пайваст набошад, дар оянда онҳо барномаро пур мекунанд, онҳо метавонанд аз ин маълумот ба даст оранд.

Албатта, мо метавонем қисми муҳимтарини худро фаромӯш накунем: ба аризаи худ муроҷиат кунед, ки файлро тафтиш кунед (ва ба он суроғаи вебсаат барои пайдо кардани он!).

Барои оғози раванд, шумо бояд фақат ин рамзи ин рамзро ба ҷои мувофиқе, ки мехоҳед XML коркард кунад, илова кунед:

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