ווי צו פּאַרס קסמל פילעס אין קסקאָדע

איינער פּשוט אַרבעט וואָס איז די באַקבאָון צו פילע אַפּס איז די פיייקייַט צו פּאַרסירן קסמל טעקעס. און, לעסאָף, קסאָקאָדע מאכט עס לעפיערעך גרינג צו פּאַרסירן אַ קסמל טעקע אין אָביעקטיוו-C.

אַ קסמל טעקע קענען אַנטהאַלטן עפּעס פון יקערדיק דאַטן וועגן דיין אַפּ צו אַ רסס פיטער פֿאַר אַ וועבזייַטל. זיי קענען אויך זיין אַ גרויס וועג פון אַפּדייטינג אינפֿאָרמאַציע ין דיין אַפּ רימאָוטלי, אַזוי בייפּאַסינג די דאַרפֿן צו פאָרלייגן אַ נייַ ביינערי צו עפּל פשוט צו לייגן אַ נייַ נומער צו אַ רשימה.

אַזוי ווי מיר פּראָצעס קסמל טעקעס אין קסקאָדע? דער פּראָצעס כּולל טריט פֿאַר ינישיייטינג די וועריאַבאַלז צו זיין געוויינט, סטאַרטינג די XML פּאַרסער פּראָצעס, פידינג אַז פּראָצעס אַ טעקע, די אָנהייב פון אַ יחיד עלעמענט, די אותיות (ווערט) ין דער עלעמענט, דער סוף פון אַ יחיד עלעמענט, און די סוף פון די פּאַרסינג פּראָצעס.

אין דעם בייַשפּיל, מיר וועט זיין פּאַרסינג אַ טעקע פון ​​די אינטערנעט דורך פארביי עס אַ ספּעציפיש וועב אַדרעס ( URL ).

מיר וועט אָנהייבן מיט בנין אויס די כעדער טעקע. דאָס איז אַ בייַשפּיל פון אַ זייער יקערדיק כעדער טעקע פֿאַר אַ דעטאַיל View קאָנטראָללער מיט די מינימום באדערפענישן פֿאַר פּאַרסינג אונדזער טעקע:

@interface RootViewController: UITableViewController {
דעטאַילוויעווקאָנטראָללער * דעטאַילוויעווקאָנטראָללער;

NSXMLParser * rssParser;
NSMutableArray * אַרטיקלען;
NSMutableDictionary * item;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL errorParsing;
}

@ פּראָפּערטי (נאַנאַטאַמיק, ריטיין) יבאָוטלעט דעטאַילוויעווקאָנטראָללער * דעטאַילוויעווקאָנטראָללער;

- (void) פּאַרסעקסמלפילעאַטורל: (NSString *) URL;

די פּאַרסקסמלפילעאַטורל פונקציאָנירן וועט אָנהייבן דעם פּראָצעס פֿאַר אונדז. ווען עס ענדיקט, די NSMutableArray "ארטיקלען" וועט האַלטן אונדזער דאַטן. דער מענגע וועט זיין געמאכט פון מיוטאַבאַל דיקשאַנעריז מיט קיז שייַכות צו די פעלד נעמען אין די קסמל טעקע.

איצט אַז מיר האָבן באַשטימט די וועריאַבאַלז, איר וועט מאַך אויף צו טרעפן די פּראָצעס אין די .מ טעקע:

- (void) פּאַרסערדידסטאַרטדאָקומענט: (NSXMLParser *) פּאַרסער {
NSLog (@ "טעקע געפונען און פּאַרסינג סטאַרטעד");

}

דעם פֿונקציע לויפט אין די אָנהייב פון דעם פּראָצעס. עס איז ניט דאַרפֿן צו שטעלן עפּעס אין דעם פֿונקציע, אָבער אויב איר ווילן צו דורכפירן אַ אַרבעט ווען די טעקע סטאַרץ צו זיין פּאַרסט, דאָס איז ווו איר וואָלט שטעלן דיין קאָד.

- (void) פּאַרסקסמלפילעאַטורל: (NSString *) URL
{

NSString * אַגענטסטרינג = @ "מאָזיללאַ / 5.0 (Macintosh; ו, ינטעל מעק אַס רענטגענ 10_5_6; ען-אונדז) AppleWebKit / 525.27.1 (KHTML, like Gecko) Version / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHEaderField: @ "User-Agent"];
קסמלפילע = [נסורלקאָננעקטיאָן סענדינסינטשראָנאָוסרעקוועסט: ריקוועסט ריסיווינג: נעפּל טעות: נול];


ארטיקלען = [[NSMutableArray allocate] init];
errorParsing = NO;

rssParser = [[NSXMLParser alloc] initWithData: קסמלפילע];
[rssParser setDelegate: זיך];

// איר קען דאַרפֿן צו ווענדן עטלעכע פון ​​די אויף דיפּענדינג אויף דעם טיפּ פון קסמל טעקע איר זענען פּאַרסינג
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[רסספּאַרסער פּאַראַס];

}

דעם פֿונקציע ינסטראַקשאַנז די מאָטאָר צו אָפּלאָדירן אַ טעקע בייַ אַ ספּעציפיש וועב אַדרעס (URL) און אָנהייב דעם פּראָצעס פֿאַר פּאַרסינג עס.

מיר ניטאָ דערציילט די ווייַט סערווירער אַז מיר זענען אַ סאַפאַרי פליסנדיק אויף מעק נאָר אין פאַל די סערווער פרוווט צו רידערעקט די יפאָנע / יפּאַד צו אַ מאָביל ווערסיע.

די אָפּציעס אין די סוף זענען ספּעציפיש צו זיכער קסמל טעקעס. רובֿ רסס טעקעס און דזשאַנעריק קסמל טעקעס וועט ניט דאַרפֿן זיי פארקערט אויף.

- (פרייַערדיק) פּאַרסער: (NSXMLParser *) פּאַרסערראָראָקקורד פּאַרסער: (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "טעות קאָד% איך", [parseError code]];
NSLog (@ "טעות אָנפירונג קסמל:% @", errorString);


errorParsing = יאָ;
}

דעם איז אַ פּשוט טעות-קאָנטראָלירונג רוטינג וואָס וועט שטעלן אַ ביינערי ווערט אויב עס ינקאַונטערז אַ טעות. איר קען דאַרפֿן עפּעס מער ספּעציפיש דאָ דיפּענדינג אויף וואָס איר טאָן. אויב איר פשוט דאַרפֿן צו לויפן עטלעכע קאָד נאָך פּראַסעסינג אין דעם פאַל פון טעות, די טעותפּאַרסינג ביינערי בייַטעוודיק קענען ווערן גערופן אין אַז צייַט.

- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName attributes: (NSDictionary *) attributeDict {
currentElement = [elementName copy];
ElementValue = [[NSMutableString alloc] init];
אויב ([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];

}

}

די פלייש פון די קסמל פּאַרסער כּולל דרייַ פאַנגקשאַנז, איינער וואָס לויפט אין די אָנהייב פון אַ יחיד עלעמענט, איינער וואָס לויפט אין די מיטל פון פּאַרסינג די עלעמענט, און איינער וואָס לויפט אין די סוף פון די עלעמענט.

פֿאַר דעם בייַשפּיל, מיר וועט זיין פּאַרסינג אַ טעקע ענלעך צו רסס טעקעס אַז ברעכן אַראָפּ עלעמענטן אין גרופּעס אונטער די כעדינג פון "ייטאַמז" ין דער קסמל טעקע. אין די אָנהייב פון די פּראַסעסינג, מיר קאָנטראָלירן פֿאַר די עלעמענט נאָמען "פּונקט" און אַלאַקייטינג אונדזער נומער ווערטערבוך ווען אַ נייַע גרופּע איז דיטעקטיד. אַנדערש, מיר ינישאַלייז אונדזער בייַטעוודיק פֿאַר די ווערט.

- (פּאָסל) פּערסער: (NSXMLParser *) פּאַרסער foundCharacters: (NSString *) string {
[ElementValue appendString: שטריקל];
}

דאָס איז די גרינג טייל. ווען מיר געפֿינען אותיות, מיר פשוט לייגן זיי צו אונדזער בייַטעוודיק "עלעמענטוואַליו".

- (void) parser: (NSXMLParser *) פּאַרסער didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
אויב ([elementName isEqualToString: @ "item"]) {
[אַרטיקלען addObject: [item copy]];
} else {
[item setObject: ElementValue forKey: elementName];
}

}

ווען מיר האָבן פאַרטיק פּראַסעסינג אַן עלעמענט, מיר דאַרפֿן צו טאָן איינער פון צוויי זאכן: (1) אויב די סוף עלעמענט איז "פּונקט" מיר האָבן פאַרענדיקן אונדזער גרופּע, אַזוי מיר וועט לייגן אונדזער ווערטערבוך צו אונדזער מענגע פון ​​"אַרטיקלען ".

אָדער (2) אויב די עלעמענט איז נישט "פּאָזיציע", מיר שטעלן די ווערט אין אונדזער ווערטערבוך מיט אַ שליסל וואָס גלייַכן די נאָמען פון די עלעמענט. (דאס מיינט, אז מיר דארפן נישט קיין פערזענליכע פארברעכן פאר יעדן פעלד אין די XML פיילא.

- (פּאָסל) פּאַרסערידידדאָקומענט: (NSXMLParser *) parser {

אויב (errorParsing == NO)
{
NSLog (@ "XML processing done!");
} else {
NSLog (@ "Error occurred during XML processing");
}

}

דאָס איז די לעצט פונקציע וואָס איז נייטיק פֿאַר אונדזער פּאַרסינג רוטין. עס פשוט ענדס די דאָקומענט. איר וועט לייגן קיין קאָד איר ווילן צו פאַרענדיקן דעם פּראָצעס דאָ אָדער עפּעס ספּעציעל איר זאל וועלן צו טאָן אין פאַל פון טעות.

איין זאַך פילע אַפּפּס זאל וועלן צו טאָן דאָ איז צו ראַטעווען די דאַטן און / אָדער קסמל טעקע צו אַ טעקע אויף די מיטל. דעריבער, אויב דער באַניצער איז נישט פארבונדן צו די אינטערנעט דער ווייַטער צייַט זיי מאַסע די אַפּ, זיי קענען נאָך באַקומען אין דעם אינפֿאָרמאַציע.

פון קורס, מיר קענען נישט פאַרגעסן די מערסט וויכטיק טייל: טעלינג דיין אַפּלאַקיישאַן צו פּאַרסירן די טעקע (און געבן עס אַ וועב אַדרעס צו געפינען עס בייַ!).

צו אָנהייבן דעם פּראָצעס, איר פשוט דאַרפֿן צו לייגן דעם שורה פון קאָד צו די צונעמען פּלאַץ ווו איר ווילן צו טאָן די קסמל פּראַסעסינג:

[זיך פּאַרסקסמלפילע אַטלורל: @ "http://www.webaddress.com/file.xml"];