Xcode හි XML ගොනුව සකස් කරගන්නේ කෙසේද

බොහෝ යෙදුම් වලට කොඳු නාරටිය වන එක් සරල කර්තව්යයක් වන්නේ XML ගොනු විසරණය කිරීමේ හැකියාවයි. සහ, වාසනාවකට මෙන්, Xcode විසින් Objective-C හි XML ගොනුව විග්රහ කිරීමට සාපේක්ෂව පහසුය.

XML ගොනුවක් ඔබගේ යෙදුම පිළිබඳ මූලික දත්ත වෙබ් අඩවියකට RSS සංග්රහයකට අඩංගු කළ හැකිය. ඔවුන් දුරස්ථව ඔබගේ යෙදුම තුළ තොරතුරු යාවත්කාලීන කිරීම සඳහා විශාල ක්රමයක් විය හැකිය. ඒ නිසා නව අයිතමයක් අලුතින් ලැයිස්තුගත කිරීම සඳහා ඇපල් වෙත යවනු ලැබේ.

එබැවින් Xcode හි XML ගොනු සැකසීමට අප හට හැක්කේ කෙසේද? ක්රියාවලිය භාවිතා කිරීමට විචල්යයන් ආරම්භ කිරීම සඳහා පියවරයන් අඩංගු වේ. XML parser ක්රියාවලිය ආරම්භ කිරීම, එම ක්රියාවලිය ගොනුවක්, එක් මූලික අංගයක ආරම්භය, මූලද්රව්යයෙහි අක්ෂර (අගය) තනි අංගයක් අවසානයේ, සහ විචල්ය ක්රියාවලියේ අවසානයයි.

මෙම උදාහරණයේදී, අපි අන්තර්ජාලයේ ගොනුවක් විශේෂ වෙබ් ලිපිනයක් ( URL ) යැවීම මගින් සිදු කෙරෙනු ඇත.

අපි ශීර්ෂ ගොනුව සෑදීමට පටන් ගනිමු. අපගේ ගොනුවේ විස්තර කිරීම සඳහා අවම පිරිවිතර සහිත නිරීක්ෂණ දැක්ම පාලකය සඳහා ඉතා මූලික ශීර්ෂ ගොනුවක උදාහරණයක් මෙය වේ:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * ලිපි;
NSMutableDictionary * අයිතමය;
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";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[ඉල්ලීම් setValue: agentString සඳහාHTTPHeaderField: @ "පරිශීලක-නියෝජිතයා"];
xmlFile = [NSURLConnection යැවීමSynchronousRequest: ඉල්ලීම නැවත ලබා දීම: ප්රතිචාර: nil දෝෂය: nil];


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

rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: ස්වයං];

// ඔබ විසින් ඔබ විසින් නිර්මාණය කරන ලද XML ගොනුවක වර්ගය මත පදනම්ව ඔබට සමහරක් ඒවා හැරවීමට අවශ්ය විය හැකිය
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[rssParser];

}}

මෙම කර්තව්යයේ විශේෂිත වෙබ් ලිපිනයක් (URL) ගොනුවක් බාගැනීම සඳහා එන්ජිමට උපදෙස් සපයන අතර එම ක්රියාවලියට අදාල ක්රියාවලිය ආරම්භ කරන්න.

අපි සේවාදායකය වෙත අපි Mac පරිගණකයේ ක්රියාත්මක වන Safari ක්රියාත්මක වන බව අපි දුරස්ථ සේවාදායකයට පවසනවා.

අවසානයේ විකල්පයන් සමහර XML ගොනු වලට විශේෂිත වේ. බොහෝ RSS ගොනු සහ සාමාන්ය XML ගොනු ඒවාට හැරී නොයනු ඇත.

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

NSString * errorString = [NSString stringWithFormat: @ "දෝෂ සහිත කේතය% i", [parseError code]];
NSLog (@ "XML විග්රහ කිරීම:% @", errorString);


errorParsing = ඔව්;
}}

මෙය දෝශයක් හටගනී නම් ද්විමය අගය සැකසිය හැකි සරල දෝෂ-පරික්ෂා රවුටරයකි. ඔබට කුමක් කළ හැකිද යන්න පිළිබඳව ඔබට විශේෂිත දෙයක් අවශ්ය විය හැකිය. දෝෂයක් ඇතිවීමේදී ඔබ විසින් සැකසීමෙන් පසුව යම් කේතයක් ධාවනය කිරීමට අවශ්ය නම්, එම අවස්ථාවෙහිදී errorParsing ද්වීමය විචලනය කැඳවිය හැක.

- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName නාමඅවකාශය: (NSString *) නාමඅවකාශය සුදුසුකම් ලැබුණිඇත: (NSString *) qඋතුරු ගුණාංග: (NSDictionary *) attributeDict {
currentElement = [elementName පිටපත];
ElementValue = [[NSMutableString වෙන් කිරීම] init];
([elementName isEqualToString: @ "අයිතමය"])) {
item = [[NSMutableDictionary alloc] init];

}}

}}

XML වර්ණදේහයේ මස් එක් අංගයක් ආරම්භයේ එක් ක්රියාකාරීත්වයක් ඇති අතර, මූලද්රව්යයේ මූලද්රව්යයේ ක්රියාකාරිත්වය මැද ඇති අතර එය මූලද්රව්යයේ අවසානයෙහි ක්රියාත්මක වන අතර එය ක්රියාත්මක වේ.

මෙම උදාහරණ සඳහා, අප විසින් XML ගොනුව තුල "අයිතම" මාතෘකාව යටතේ කණ්ඩායම් කොටස් වලට කණ්ඩායම් බිඳ දමනු ලබන RSS ගොනුවට සමානයි. සැකසීමේ ආරම්භයේදී, අපි අයිතමය "අයිතමය" සඳහා වන අයිතමය පරීක්ෂා කර නව කණ්ඩායමක් හමු වූ විට අපගේ භාණ්ඩ ශබ්ද කෝෂය බෙදා හැරීම. එසේ නොමැතිනම්, අපගේ අගය වෙනස් කිරීම සඳහා අපි ආරම්භ කරමු.

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

මෙය පහසු කොටසකි. අපි චරිත සොයා ගන්නා විට, අපි ඒවායේ විචල්යය "ElementValue" එකට එකතු කරන්නෙමු.

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName නාමඅවකාශය: (NSString *) නාමඅවකාශය සුදුසුකම් ලැබුණු නාම: (NSString *) qName {
([elementName isEqualToString: @ "අයිතමය"])) {
[ලිපි එකතු කිරීම: [අයිතම පිටපත]];
} වෙනත්
[අයිතම setObject: කේඩීඊ සඳහා ElementValue: elementname];
}}

}}

අප විසින් මූලද්රව්යයක් සැකසීම අවසන් කළ විට, අපි කාරණා දෙකකින් එකක් කළ යුතුය: (1) අවසාන අංගය "අයිතමය" නම්, අපි අපේ කණ්ඩායම අවසන් කර ඇති නිසා, අපි අපගේ " ".

නැතහොත් (2) මූලද්රව්යය "අයිතමය" නොවේ නම්, අපි අපගේ ශබ්ද කෝෂයේ මූලද්රව්යයේ නමට ගැලපෙන යතුර සමඟ අපගේ අගය අගය කරනු ඇත. (මෙය එක් XML ගොනුව තුල එක් එක් ක්ෂේත්රය සඳහා එක් එක් විචල්යයක් අවශ්ය නොවේ.

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

(errorParsing == NO)
{
NSLog (@ "XML සැකසුම");
} වෙනත්
NSLog (@ "XML සැකසුම තුළදී දෝශයක් ඇතිවිය");
}}

}}

අපගේ ව්යාකරණ ක්රියාදාමයට අවශ්ය අන්තිම කාර්යය මෙයයි. එය සරලව ලේඛනය අවසන් කරයි. මෙහිදී ඔබට ක්රියාවලිය අවසන් කිරීමට අවශ්ය ඕනෑම කේතයක් හෝ දෝෂයක් ඇති විට ඔබ කිරීමට අවශ්ය විශේෂ දෙයක් තිබේ.

මෙයින් බොහෝ යෙදුම් සඳහා අවශ්ය වන්නේ එක් දත්තයක් සඳහා දත්ත සහ / හෝ XML ගොනුව උපාංගය වෙත ලිපිගොනු සුරැකීමයි. ඒ ආකාරයට, පරිශීලකයා අන්තර්ජාලය සමඟ සම්බන්ධ නොවූ විට, ඔවුන් යෙදුම පූරණය කරන විට, මෙම තොරතුරු තවමත් ලබා ගත හැක.

සැබැවින්ම, වඩාත්ම වැදගත් කොටස අමතක කළ නොහැක: ගොනුව විග්රහ කිරීමට ඔබගේ යෙදුම (එය එය සොයා ගැනීමට වෙබ් ලිපිනයක් ලබා දෙයි).

ක්රියාවලිය ආරම්භ කිරීම සඳහා, ඔබ විසින් XML සැකසුම කිරීමට අවශ්ය සුදුසු ස්ථානයට මෙම කේතයේ කේතය එකතු කිරීමට අවශ්ය වේ:

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