Xcode- ൽ എക്സ്എംഎൽ ഫയലുകൾ എങ്ങനെ പാഴ്സ് ചെയ്യാം

നിരവധി ആപ്ലിക്കേഷനുകളുടെ നട്ടെല്ല് ആയ ലളിതമായ ഒരു ജോലി XML ഫയലുകള് പാഴ്സ് ചെയ്യാനുള്ള കഴിവാണ്. കൂടാതെ, ഭാഗ്യവശാൽ, Xcode ഒബ്ജക്റ്റീവ്-സിയിൽ ഒരു എക്സ്എംഎൽ ഫയൽ പാഴ്സ് ചെയ്യാൻ വളരെ എളുപ്പമുള്ളതാക്കുന്നു.

നിങ്ങളുടെ അപ്ലിക്കേഷനെക്കുറിച്ചുള്ള അടിസ്ഥാന ഡാറ്റയിൽ നിന്ന് ഒരു RSS ഫീഡിലേക്ക് ഒരു XML ഫയലിൽ ഒരു XML ഫയലിൽ ഉൾപ്പെടാം. നിങ്ങളുടെ അപ്ലിക്കേഷനിൽ വിദൂരമായി വിവരങ്ങളെ അപ്ഡേറ്റുചെയ്യുന്നതിനുള്ള മികച്ച മാർഗവും ഇതോടൊപ്പം ആകാം. ഒരു പുതിയ ഇനത്തെ ഒരു പുതിയ ഇനത്തെ ചേർക്കാൻ ഒരു ആപ്പിളിന് ഒരു പുതിയ ബൈനറി സമർപ്പിക്കേണ്ട ആവശ്യകതയെ മറികടന്ന് അവ മറികടക്കാൻ കഴിയും.

അപ്പോൾ എക്സ്ക്ലൂസില് എക്സ്എംഎല് ഫയലുകള് എങ്ങനെയാണ് കൈകാര്യം ചെയ്യുന്നത്? വേരിയബിള് ഉപയോഗിക്കുവാന് വേരിയബിള് ആരംഭിക്കുന്നതിനുള്ള നടപടിക്രമങ്ങള്, എക്സ്എംസി പാസ്കര് പ്രോസസ്സ് ആരംഭിക്കുന്നത്, പ്രോസസ് ഒരു ഫയല്, ഒരു പ്രത്യേക ഘടകത്തിന്റെ തുടക്കവും, മൂലകത്തിലെ പ്രതീകങ്ങളും (മൂല്യം) ഒരു വ്യക്തിഗത മൂലകത്തിന്റെ അവസാനം, പാഴ്സിങ് പ്രക്രിയയുടെ അവസാനം.

ഈ ഉദാഹരണത്തിൽ, ഞങ്ങൾ ഒരു പ്രത്യേക വെബ് വിലാസം ( URL ) കടന്ന് ഇന്റർനെറ്റിൽ നിന്ന് ഒരു ഫയൽ പാഴ്സ് ചെയ്യും.

ഹെഡ്ഡർ ഫയൽ നിർമ്മിച്ചുകൊണ്ട് നമുക്ക് തുടങ്ങാം. ഞങ്ങളുടെ ഫയൽ പാഴ്സ് ചെയ്യുന്നതിനുള്ള ഏറ്റവും കുറഞ്ഞ ആവശ്യകതകളോടെ ഒരു വിശദാംശം കണ്ട കൺട്രോളറിനു വേണ്ടിയുള്ള അടിസ്ഥാന ഹെഡർ ഫയലിന്റെ ഒരു ഉദാഹരണമാണിത്:

@interface RootViewController: UITableViewController {
വിശദമായവിന്യാസം കൺട്രോളർ * വിശദവിവരങ്ങൾ കാണുക കണ്ട്രോളർ;

NSXML പാർസൽ * rssParser;
NSMutableArray * ലേഖനങ്ങൾ;
NSMutableDictionary * ഇനം;
NSString * നിലവിലെ Element;
NSMutableString * ElementValue;
BOOL പിശക് പാർസിസ്;
}

@ പ്രോപ്റ്റിറ്റി (nonatomic, നിലനിർത്തുക) IBOutlet വിശദമായി ViewController * detailViewController;

- (ശൂന്യമല്ല) പാഴ്സ്എക്സ്ഫൈൽഅഡ്ജ്: (NSString *) URL;

ParseXMLFileAtURL പ്രവർത്തനം നമുക്കായി പ്രക്രിയ ആരംഭിക്കും. അതു പൂർത്തിയാക്കുമ്പോൾ, NSMutableArray "ലേഖനങ്ങൾ" ഞങ്ങളുടെ ഡാറ്റ കൈവരിക്കും. XML ശ്രേണിയിലെ ഫീൽഡ് പേരുകളുമായി ബന്ധപ്പെട്ട കീകൾ ഉപയോഗിച്ച് മ്യൂട്ടേറ്റ് നിഘണ്ടുക്കൾ ഉണ്ടാകും.

ഇപ്പോൾ നമ്മൾ വേരിയബിളുകൾ സജ്ജമാക്കിയിട്ടുണ്ട്, നമ്മൾ MM ഫയലിലെ പ്രക്രിയയുടെ മീറ്റിംഗിലേക്ക് നീങ്ങും.

- (വാലില്) parserDidStartDocument: (NSXMLParser *) പാഴ്സര് {
NSLog (@ "ഫയൽ കണ്ടെത്തി പാഴ്സിങ് ആരംഭിച്ചു");

}

പ്രക്രിയയുടെ ആരംഭത്തിൽ ഈ ഫംഗ്ഷൻ പ്രവർത്തിക്കുന്നു. ഈ ഫങ്ഷനിൽ ഒന്നും നൽകേണ്ടതില്ല, എന്നാൽ ഫയൽ പാഴ്സ് ചെയ്യുമ്പോൾ നിങ്ങൾക്ക് ഒരു ടാസ്ക് നടത്താൻ ആഗ്രഹമുണ്ടെങ്കിൽ, നിങ്ങളുടെ കോഡ് എവിടെയാണ് ഇടുക എന്ന്.

- (ശൂന്യമല്ല) പാഴ്സ്എക്സ്ഫൈൽഅഡ്ജ്: (NSString *) URL
{

NSString * ഏജന്റ്സ്ട്രീം = @ "മോസില്ല / 5.0 (മക്കിൻടോഷ്, യു ;, ഇന്റൽ മാക് ഒഎസ് എക്സ് 10_5_6; എൻ-എ) ആപ്പിൾവെബ്കിറ്റ് / 525.27.1 (കെഎച്ച്ടിഎംഎൽ, ഗെക്കോയെപ്പോലെ) പതിപ്പ് / 3.2.1 സഫാരി / 525.27.1";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentTring forHTTPHeaderField: @ "ഉപയോക്തൃ-ഏജന്റ്"];
xmlFile = [NSURLConnection sendSynchronousRequest: അഭ്യർത്ഥന മടക്കിനൽകൽ പ്രതികരണം: ഇല്ല പിശക്: nil];


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

rssParser = [[NSXML പാർസര് Alloc] initWithData: xmlFile];
[rssParser setDelegate: self];

// നിങ്ങൾ പാഴ്സ് ചെയ്യുന്ന XML ഫയൽ തരം അനുസരിച്ച് അവയിൽ ചിലത് നിങ്ങൾ തിരുത്തിയിരിക്കണം
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldRefportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[rssParser parse];

}

ഒരു പ്രത്യേക വെബ് വിലാസത്തിൽ (URL) ഒരു ഫയൽ ഡൌൺലോഡ് ചെയ്യാൻ ഈ ഫംഗ്ഷൻ എൻജിനീയർ നിർദ്ദേശിക്കുന്നു കൂടാതെ ഇത് പാഴ്സ് ചെയ്യുന്നതിന് പ്രക്രിയ ആരംഭിക്കുക.

ഒരു മൊബൈൽ പതിപ്പിലേക്ക് സെർവർ ഐഫോൺ / ഐപാഡ് വഴി റീഡയറക്ട് ചെയ്യുന്നെങ്കിൽ ഞങ്ങൾ Mac- ൽ പ്രവർത്തിക്കുന്ന ഒരു സഫാരിയാണ് വിദൂര സെർവർ പറയുന്നത്.

ചില എക്സ്എംഎൽ ഫയലുകൾക്ക് മാത്രമായുള്ള ഓപ്ഷനുകൾ. മിക്ക RSS ഫയലുകളും സാധാരണ XML ഫയലുകളും അവ ഓണാക്കേണ്ടതില്ല.

- (വാലിദ്) പാഴ്സർ: (NSXML പാർസർ *) പാഴ്സ്പർ ParseError ഒപ്പിറഡ്: (എൻ.എസ്.ഇററർ *) പാഴ്സ്ഇററ് {

NSString * errorString = [NSStrying stringWithFormat: @ "പിശക് കോഡ്% i", [parseError code];
NSLog (@ "XML പാഴ്സ് ചെയ്യുന്നതിൽ പിശക്:% @", errorString);


errorParsing = YES;
}

ഇത് ഒരു പിശക് കാണിക്കുന്നുണ്ടെങ്കിൽ ഒരു ബൈനറി മൂല്യത്തെ സജ്ജമാക്കുന്ന ലളിതമായ പിശക് പരിശോധന റൂട്ടിംഗ് ആണ്. നിങ്ങൾ ചെയ്യുന്നതിനെ അടിസ്ഥാനമാക്കി ഇവിടെ കൂടുതൽ നിർദ്ദിഷ്ട എന്തെങ്കിലും ആവശ്യമായി വന്നേക്കാം. തെറ്റു് സംഭവിയ്ക്കുന്നതിനു് ശേഷം നിങ്ങൾക്കു് ചില കോഡ് പ്രവർത്തിയ്ക്കണമെങ്കിൽ error barsing ബൈനറി ചര നക്ഷത്രം എന്നു് വിളിയ്ക്കാം.

- (NoidXParser *) പാഴ്സ്സർ ചെയ്തു: (NSString *) elementName namespaceURI: (NSString *) namespaceURI യോഗ്യതകവാക്ക്: (NSString *) qName ആട്രിബ്യൂട്ടുകൾ: (NSDictionary *) ആട്രിബ്യൂട്ട് ഡിക്റ്റക്റ്റ് {
currentElement = [elementName copy];
ElementValue = [[NSMutable സ്ടേംഗ് alloc] init];
([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];

}

}

എക്സ്എംഎൽ പാഴ്സറിന്റെ മാംസം മൂന്ന് പ്രവർത്തനങ്ങൾ ഉൾക്കൊള്ളുന്നു. ഒരു പ്രത്യേക ഘടകത്തിന്റെ തുടക്കത്തിൽ പ്രവർത്തിക്കുന്ന ഒരു ഘടകം, ഒരു ഘടകം പാരിബിൽ നടുക്കുന്നതും ഒരു മൂലകത്തിന്റെ അവസാനം പ്രവർത്തിക്കുന്നതും തമ്മിൽ പ്രവർത്തിക്കുന്നു.

ഈ ഉദാഹരണത്തിൽ, XML ഫയലിലെ "ഇനങ്ങൾ" എന്ന തലക്കെട്ടിനു കീഴിലുള്ള ഗ്രൂപ്പുകളിലേക്ക് മൂലകങ്ങളെ തകർക്കുന്ന RSS ഫയലുകളുടേതുപോലുള്ള ഒരു ഫയൽ പാഴ്സ് ചെയ്യും. പ്രോസസ് ആരംഭിക്കുമ്പോൾ, "ഇനം" എന്ന മൂലകത്തിന്റെ പേര് പരിശോധിക്കുകയും ഒരു പുതിയ ഗ്രൂപ്പ് കണ്ടെത്തുമ്പോൾ ഞങ്ങളുടെ ഇന നിഘണ്ടു അനുവദിക്കുകയും ചെയ്യുന്നു. അല്ലാത്തപക്ഷം മൂല്യത്തിനായാണ് ഞങ്ങളുടെ വേരിയബിൾ ആരംഭിക്കുന്നത്.

- (വാലിദ്) പാഴ്സർ: (NSXML പാർസര് *) പാഴ്സറില് കണ്ടെത്തിക്ഷഹേതാക്കള്: (NSString *) സ്ട്രിംഗ് {
[ElementValue appendString: സ്ട്രിംഗ്];
}

ഇതാണ് എളുപ്പമുള്ള ഭാഗം. നമ്മൾ പ്രതീകങ്ങൾ കണ്ടെത്തുമ്പോൾ, അവ നമ്മുടെ വേരിയബിളായ "ElementValue" - ൽ ചേർക്കുകയാണ്.

- (പൂജ്യം) പാഴ്സർ: (NSXML പാർസർ *) പാഴ്സ്സർ didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI യോഗ്യതകവാക്ക്: (NSString *) qName {
([elementName isEqualToString: @ "item"]) {
[ലേഖനങ്ങൾ ചേർക്കുക ഒബ്ജക്റ്റ്: [ഇനം പകർപ്പ്]];
} else {
[ഇനം setObject: ElementValue forKey: elementName];
}

}

ഒരു മൂലക നിർവഹണം പൂർത്തിയായപ്പോൾ, നമുക്ക് രണ്ട് കാര്യങ്ങൾ ചെയ്യണം: (1) എൻഡ് ഘടകമാണ് "ഇനം" എങ്കിൽ, ഞങ്ങൾ ഞങ്ങളുടെ ഗ്രൂപ്പ് പൂർത്തീകരിച്ചു, അതുകൊണ്ട് നമ്മൾ നമ്മുടെ നിഘണ്ടുവിനെ "ലേഖനങ്ങളുടെ" ".

അല്ലെങ്കിൽ (2) മൂലകം "ഇനം" അല്ലങ്കിൽ, നമ്മൾ നിഘണ്ടുള്ള മൂല്യത്തെ നമ്മുടെ നിഘണ്ടുവിലെ മൂലകത്തിന്റെ പേരിനു യോജിക്കുന്ന ഒരു കീ ഉപയോഗിച്ച് സജ്ജമാക്കും. (ഇതിനർത്ഥം എക്സ് എംഎൽ ഫയലിൽ ഓരോ ഫീൽഡിനും ഒരു വ്യക്തിഗത വേരിയബിൾ ആവശ്യമില്ല, നമുക്ക് അവയെ കുറച്ചുകൂടി ചലനാത്മകമായി പ്രോസസ്സ് ചെയ്യാൻ കഴിയും.)

- (വാലില്) parserDidEndDocument: (NSXMLParser *) പാഴ്സര് {

(തെറ്റുപറ്റി == NO)
{
NSLog (@ "എക്സ്എംഎൽ പ്രോസസ്സിംഗ് പൂർത്തിയായി!");
} else {
NSLog (@ "XML പ്രോസസ്സിനിടയിൽ പിശക് സംഭവിച്ചു");
}

}

ഇത് നമ്മുടെ പാഴ്സന പ്രക്രിയയ്ക്ക് ആവശ്യമായ അവസാന ചടങ്ങാണ്. ഇത് ഡോക്യുമെന്റ് അവസാനിപ്പിക്കുന്നു. നിങ്ങൾ ഇവിടെ പ്രോസസ്സ് പൂർത്തിയാക്കാൻ ആഗ്രഹിക്കുന്ന കോഡ് അല്ലെങ്കിൽ നിങ്ങൾക്ക് തെറ്റ് സംഭവിക്കാൻ സാധ്യതയുള്ള എന്തെങ്കിലും പ്രത്യേകത നൽകും.

ഒന്നിലേറെ ആപ്ലിക്കേഷനുകൾ ഇവിടെ ചെയ്യാനാഗ്രഹിച്ചേക്കാവുന്ന ഒരു കാര്യം, ഡാറ്റയിലെ / അല്ലെങ്കിൽ എക്സ്എംഎൽ ഫയൽ ഉപകരണത്തിൽ ഒരു ഫയലിലേക്ക് സൂക്ഷിക്കുക എന്നതാണ്. അങ്ങനെയാണ്, ഉപയോക്താക്കൾക്ക് ആപ്ലിക്കേഷൻ ലോഡുചെയ്യുമ്പോൾ അടുത്ത തവണ ഇന്റർനെറ്റിലേക്ക് കണക്റ്റുചെയ്തിട്ടില്ലെങ്കിൽ, ഈ വിവരം തുടർന്നും ലഭിക്കും.

തീർച്ചയായും, ഏറ്റവും പ്രധാനപ്പെട്ട ഭാഗം ഞങ്ങൾ ഒരിക്കലും മറക്കാൻ പറ്റില്ല: ഫയലിന്റെ പാഴ്സനയ്ക്കായി നിങ്ങളുടെ ആപ്ലിക്കേഷനോടു പറഞ്ഞു (അത് കണ്ടെത്തുന്നതിന് ഒരു വെബ് വിലാസം നൽകുന്നതും!).

പ്രക്രിയ ആരംഭിക്കുന്നതിന്, നിങ്ങൾ ഈ പ്രോജക്റ്റിനെ XML പ്രോസസ്സിംഗ് ചെയ്യാൻ ആഗ്രഹിക്കുന്ന അനുയോജ്യമായ സ്ഥലത്തിലേക്ക് ചേർക്കേണ്ടിവരും:

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