តើធ្វើដូចម្តេចដើម្បីញែកឯកសារ XML ក្នុង Xcode

ភារកិច្ចសាមញ្ញមួយដែលជាឆ្អឹងខ្នងចំពោះកម្មវិធីជាច្រើនគឺជាសមត្ថភាពវិភាគឯកសារ XML ។ ហើយជាសំណាងល្អ Xcode ធ្វើឱ្យវាមានភាពងាយស្រួលក្នុងការញែកឯកសារ XML នៅ Objective-C ។

ឯកសារ XML មួយអាចមានអ្វីមួយពីទិន្នន័យមូលដ្ឋានអំពីកម្មវិធីរបស់អ្នកទៅ មតិព័ត៌មាន RSS សម្រាប់គេហទំព័រ។ ពួកវាក៏អាចជាវិធីដ៏អស្ចារ្យក្នុងការធ្វើបច្ចុប្បន្នភាពព័ត៌មាននៅក្នុងកម្មវិធីរបស់អ្នកពីចម្ងាយដោយមិនចាំបាច់ដាក់បញ្ចូលប្រព័ន្ធគោលពីរទៅ Apple ដោយគ្រាន់តែបន្ថែមធាតុថ្មីទៅបញ្ជីប៉ុណ្ណោះ។

ដំណើរការនេះមានជំហានសម្រាប់ចាប់ផ្តើមអថេរដែលត្រូវប្រើដោយចាប់ផ្ដើមដំណើរការញែក XML ដោយការផ្ដល់ដំណើរការដំណើរការឯកសារការចាប់ផ្តើមធាតុនីមួយៗតួអក្សរ (តម្លៃ) នៅក្នុងធាតុ, ចុងបញ្ចប់នៃធាតុនិមួយៗនិងបញ្ចប់នៃដំណើរការបកប្រែ។

នៅក្នុងឧទាហរណ៍នេះយើងនឹងត្រូវញែកឯកសារពីអ៊ីនធើណែតដោយបញ្ជូនវាទៅអាសយដ្ឋានគេហទំព័រជាក់លាក់ ( URL ) ។

យើងនឹងចាប់ផ្តើមជាមួយការបង្កើតឯកសារបឋមកថា។ នេះជាឧទាហរណ៍មួយនៃឯកសារបឋមកថាមូលដ្ឋានគ្រឹះសម្រាប់ឧបករណ៍មើលព័ត៌មានលម្អិតដែលមានតម្រូវការអប្បបរមាសម្រាប់ញែកឯកសាររបស់យើង:

@ interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
អត្ថបទ NSMutableArray *
NSMutableDictionary * item;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL errorParsing;
}

@property (មិនអាន, រក្សា) 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";
NSMutableURL ស្នើសុំ * សំណើ = [NSMutableURL ស្នើសុំស្នើសុំជាមួយ URL:
[NSURL URLWithString: URL]] ។
[requestValue: agentString for HTTPHeaderField: @ "អ្នកប្រើភ្នាក់ងារ"];
xmlFile = [NSURLConnection sendSynchronousRequest: request returnResponse: nil error: nil];


អត្ថបទ = [[NSMutableArray alloc] init];
errorParsing = NO;

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

// អ្នកប្រហែលជាត្រូវការបង្វែរវាមួយចំនួនអាស្រ័យលើប្រភេទឯកសារ XML ដែលអ្នកកំពុងញែក
[rssParser setShouldProcessNamespaces: ទេ];
[rssParser setShouldReportNamespacePrefix: ទេ];
[rssParser setShouldResolveExternalEntities: ទេ];

[rssParser parse];

}

មុខងារនេះណែនាំម៉ាស៊ីនដើម្បីទាញយកឯកសារនៅអាសយដ្ឋានគេហទំព័រជាក់លាក់មួយ (URL) ហើយចាប់ផ្ដើមដំណើរការសម្រាប់ញែកវា។

យើងកំពុងប្រាប់ម៉ាស៊ីនបម្រើពីចម្ងាយថាយើងជា Safari ដែលកំពុងរត់នៅលើ Mac គ្រាន់តែក្នុងករណីដែលម៉ាស៊ីនបម្រើព្យាយាមប្តូរទិស ទូរស័ព្ទ iPhone / iPad ទៅជាកំណែទូរស័ព្ទ។

ជម្រើសនៅចុងបញ្ចប់គឺជាក់លាក់ចំពោះឯកសារ XML ជាក់លាក់។ ឯកសារ RSS និងឯកសារ XML ទូទៅបំផុតនឹងមិនត្រូវបានបើកទេ។

- (ចាត់ទុកជាមោឃៈ) កម្មវិធីញែក: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "កូដកំហុស% i", [កូដ parseError]] ។
NSLog (@ "កំហុសញែក XML:% @", errorString);


errorParsing = បាទ / ចាស;
}

នេះគឺជាការរកមើលកំហុសធម្មតាដែលនឹងកំណត់តម្លៃប្រព័ន្ធគោលពីរប្រសិនបើវាជួបប្រទះកំហុសឆ្គងមួយ។ អ្នកអាចត្រូវការអ្វីជាក់លាក់បន្ថែមទៀតនៅទីនេះអាស្រ័យលើអ្វីដែលអ្នកកំពុងធ្វើ។ ប្រសិនបើអ្នកគ្រាន់តែត្រូវការរត់កូដមួយចំនួនបន្ទាប់ពីកែច្នៃក្នុងករណីកំហុសអថេរគោលពីរខុសនេះអាចត្រូវបានហៅនៅពេលនោះ។

- (ចាត់ទុកជាមោឃៈ) កម្មវិធីញែក: (NSXMLParser *) parser បានធ្វើមូលដ្ឋានចាប់ផ្តើម: (NSString *) elementName namespaceURI: (NSString *) namespaceURI ឈ្មោះ qualName: (NSString *) គុណលក្ខណៈគុណលក្ខណៈ: (NSDictionary *) attributeDict {
currentElement = [elementName copy];
ElementValue = [[NSMutableString alloc] init];
ប្រសិនបើ ([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];

}

}

សាច់នៃឧបករណ៍ញែក XML មានមុខងារចំនួនបីដែលរត់នៅដើមធាតុនីមួយៗដែលរត់ក្នុងពាក់កណ្តាលនៃធាតុវិភាគនិងធាតុមួយដែលរត់នៅចុងនៃធាតុ។

ចំពោះឧទាហរណ៍នេះយើងនឹងវិភាគឯកសារដែលស្រដៀងទៅនឹងឯកសារ RSS ដែលបំបែកធាតុជាក្រុមនៅក្រោមក្បាល "ធាតុ" នៅក្នុងឯកសារ XML ។ នៅពេលចាប់ផ្ដើមដំណើរការយើងកំពុងពិនិត្យរកឈ្មោះធាតុ "ធាតុ" និងបម្រុងទុកវចនានុក្រមធាតុរបស់យើងនៅពេលក្រុមថ្មីត្រូវបានរកឃើញ។ បើមិនដូច្នោះទេយើងចាប់ផ្តើមអថេររបស់យើងសម្រាប់តម្លៃ។

- (ចាត់ទុកជាមោឃៈ) កម្មវិធីញែក: (NSXMLParser *) កម្មវិធីញែកបានរកឃើញតួអក្សរ: (NSString *) string {
[ElementValue appendString: string];
}

នេះគឺជាផ្នែកមួយងាយស្រួល។ នៅពេលយើងរកតួអក្សរយើងគ្រាន់តែបន្ថែមវាទៅអថេរ ElementValue របស់យើង។

- (ចាត់ទុកជាមោឃៈ) កម្មវិធីញែក: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI ឈ្មោះ qualName: (NSString *) qName {
ប្រសិនបើ ([elementName isEqualToString: @ "item"]) {
[អត្ថបទ addObject: [item copy]];
} else {
ធាតុ [object setObject: ElementValue forKey: elementName];
}

}

នៅពេលដែលយើងបានបញ្ចប់ដំណើរការធាតុមួយយើងត្រូវធ្វើមួយក្នុងចំណោមពីរយ៉ាង: (1) ប្រសិនបើធាតុចុងក្រោយគឺ "ធាតុ" យើងបានបញ្ចប់ក្រុមរបស់យើងដូច្នេះយើងនឹងបន្ថែមវចនានុក្រមរបស់យើងទៅអារេរបស់យើង " "។

ឬ (2) ប្រសិនបើធាតុមិនមែនជា "ធាតុ" យើងនឹងកំណត់តម្លៃនៅក្នុងវចនានុក្រមរបស់យើងជាមួយកូនសោដែលត្រូវគ្នានឹងឈ្មោះរបស់ធាតុ។ (នេះមានន័យថាយើងមិនត្រូវការអថេរបុគ្គលសម្រាប់វាលនីមួយៗនៅក្នុងឯកសារ XML យើងអាចដំណើរការពួកវាបានច្រើនជាងមុន។ )

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

ប្រសិនបើ (errorParsing == ទេ)
{
NSLog (@ "ដំណើរការ XML ដំណើរការ!");
} else {
NSLog (@ "កំហុសបានកើតឡើងកំឡុងពេលដំណើរការ XML");
}

}

នេះជាមុខងារចុងក្រោយដែលត្រូវការសម្រាប់ទម្លាប់ញែករបស់យើង។ វាគ្រាន់តែបញ្ចប់ឯកសារប៉ុណ្ណោះ។ អ្នកនឹងដាក់លេខកូដណាមួយដែលអ្នកចង់បញ្ចប់ដំណើរការនៅទីនេះឬអ្វីៗពិសេសដែលអ្នកចង់ធ្វើក្នុងករណីមានកំហុស។

រឿងមួយដែលកម្មវិធីជាច្រើនប្រហែលជាចង់ធ្វើនៅទីនេះគឺដើម្បីរក្សាទុកទិន្នន័យនិង / ឬឯកសារ XML ទៅឯកសារមួយនៅលើឧបករណ៍។ តាមវិធីនេះប្រសិនបើអ្នកប្រើមិនបានភ្ជាប់អ៊ីនធឺរណែតនៅពេលដែលពួកគេផ្ទុកកម្មវិធីនោះពួកគេនៅតែអាចទទួលបានព័ត៌មាននេះ។

ជាការពិតណាស់យើងមិនអាចភ្លេចផ្នែកសំខាន់បំផុត: ប្រាប់កម្មវិធីរបស់អ្នកដើម្បីវិភាគឯកសារ (និងផ្តល់ឱ្យវាជាអាសយដ្ឋានគេហទំព័រដើម្បីរកវានៅ!) ។

ដើម្បីចាប់ផ្តើមដំណើរការអ្នកត្រូវបន្ថែមកូដបន្ទាត់នេះទៅកន្លែងសមស្របដែលអ្នកចង់ធ្វើការដំណើរការ XML:

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