ວິທີການແຍກໄຟລ໌ XML ໃນ Xcode

ຫນຶ່ງໃນວຽກງານທີ່ງ່າຍດາຍທີ່ເປັນ backbone ສໍາລັບກິດຫຼາຍແມ່ນຄວາມສາມາດທີ່ຈະແຍກໄຟລ໌ XML ໄດ້. ແລະ, ໂຊກດີ, Xcode ເຮັດໃຫ້ມັນງ່າຍດາຍທີ່ຈະແຍກເອກະສານ XML ໃນ Objective-C.

ໄຟລ໌ XML ສາມາດມີຂໍ້ມູນຈາກຂໍ້ມູນພື້ນຖານກ່ຽວກັບແອັບຯຂອງທ່ານກັບ ອາຫານ RSS ສໍາລັບເວັບໄຊທ໌. ພວກເຂົາຍັງສາມາດເປັນວິທີທີ່ດີທີ່ສຸດໃນການປັບປຸງຂໍ້ມູນໃນ app ຂອງທ່ານຈາກຫ່າງໄກສອກຫຼີກ, ໂດຍສະເພາະແມ່ນການປະຕິບັດຕາມຄວາມຕ້ອງການທີ່ຈະສົ່ງປອມໃຫມ່ກັບ Apple ພຽງແຕ່ຕື່ມລາຍການໃຫມ່ໃນບັນຊີລາຍຊື່.

ຂະບວນການປະກອບດ້ວຍຂັ້ນຕອນສໍາລັບການເລີ່ມຕົ້ນຕົວແປທີ່ຈະໃຊ້, ເລີ່ມຕົ້ນຂະບວນການ parser XML, ການໃຫ້ຂະບວນການໄຟລ໌, ການເລີ່ມຕົ້ນຂອງອົງປະກອບສ່ວນບຸກຄົນ, ຕົວອັກສອນ (ມູນຄ່າ) ພາຍໃນອົງປະກອບ, ສິ້ນສຸດຂອງອົງປະກອບສ່ວນບຸກຄົນ, ແລະໃນຕອນທ້າຍຂອງຂະບວນການວິເຄາະ.

ໃນຕົວຢ່າງນີ້, ພວກເຮົາຈະແຍກໄຟລ໌ຈາກອິນເຕີເນັດໂດຍຖ່າຍທອດລາຍຊື່ເວັບໄຊທ໌ຫນຶ່ງໂດຍສະເພາະ ( URL ).

ພວກເຮົາຈະເລີ່ມຕົ້ນດ້ວຍການກໍ່ສ້າງໄຟລ໌ຫົວຂໍ້. ນີ້ແມ່ນຕົວຢ່າງຂອງເອກະສານຫົວຂໍ້ພື້ນຖານທີ່ສຸດສໍາລັບໂປແກຼມ View Detail Controller ທີ່ມີຄວາມຕ້ອງການຂັ້ນຕ່ໍາສໍາລັບການແຍກໄຟລ໌ຂອງພວກເຮົາ:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController

NSXMLParser * rssParser
NSMutableArray * articles
NSMutableDictionary * item
NSString * currentElement
NSMutableString * ElementValue
BOOL errorParsing
}

@property (noatomic, retain) 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 (KHTML, ເຊັ່ນ Gecko) ເວີຊັນ / 3.2.1 Safari / 525.271";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]].
[requestValue: agentString for HTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: request returnResponse: nil error: nil]


ບົດຄວາມ = [[NSMutableArray alloc] init]
errorParsing = NO

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

// ທ່ານອາດຈໍາເປັນຕ້ອງປ່ຽນບາງຢ່າງນີ້ຂຶ້ນຢູ່ກັບປະເພດຂອງໄຟລ໌ XML ທີ່ທ່ານກໍາລັງວິເຄາະ
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO]
[rssParser setShouldResolveExternalEntities: NO]

[rssParser parse]

}

ຟັງຊັນນີ້ instructs ເຄື່ອງຈັກໃນການດາວໂຫລດໄຟລ໌ຢູ່ທີ່ຢູ່ເວັບໄຊທ໌ຫນຶ່ງໂດຍສະເພາະ (URL) ແລະເລີ່ມຕົ້ນຂະບວນການສໍາລັບການວິເຄາະມັນ.

ພວກເຮົາກໍາລັງບອກກັບເຄື່ອງແມ່ຂ່າຍຫ່າງໄກສອກຫຼີກວ່າພວກເຮົາເປັນ Safari ທີ່ແລ່ນຢູ່ໃນ Mac ພຽງແຕ່ໃນກໍລະນີທີ່ເຄື່ອງແມ່ຂ່າຍພະຍາຍາມທີ່ຈະປ່ຽນເສັ້ນທາງ iPhone / iPad ໄປໃນມືຖື.

ຕົວເລືອກຕ່າງໆທີ່ຢູ່ໃນຕອນທ້າຍແມ່ນສະເພາະກັບໄຟລ໌ XML ທີ່ແນ່ນອນ. ໄຟລ໌ RSS ສ່ວນໃຫຍ່ແລະໄຟລ໌ XML ທົ່ວໄປຈະບໍ່ຈໍາເປັນຕ້ອງເປີດໃຫ້ພວກເຂົາ.

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

NSString * errorString = [NSString stringWithFormat: @ "Error code% i", [code parseError]]
NSLog (@ "Error parsing XML:% @", errorString);


errorParsing = YES
}

ນີ້ແມ່ນເສັ້ນທາງການກວດສອບຄວາມຜິດພາດທີ່ງ່າຍດາຍທີ່ຈະກໍານົດມູນຄ່າໄບຕ໌ຖ້າມັນພົບຂໍ້ຜິດພາດ. ທ່ານອາດຈະຕ້ອງການບາງສິ່ງບາງຢ່າງສະເພາະທີ່ນີ້ຂຶ້ນຢູ່ກັບສິ່ງທີ່ທ່ານກໍາລັງເຮັດ. ຖ້າທ່ານພຽງແຕ່ຕ້ອງການດໍາເນີນການລະຫັດບາງຫຼັງຈາກການປຸງແຕ່ງໃນກໍລະນີຂອງຂໍ້ຜິດພາດ, ຕົວແປທີ່ບໍ່ຖືກຕ້ອງຂອງ 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]

}

}

ຊີ້ນຂອງ parser XML ປະກອບມີສາມຫນ້າທີ່, ຫນຶ່ງທີ່ເນັ້ນໃນຕອນເລີ່ມຕົ້ນຂອງອົງປະກອບສ່ວນບຸກຄົນ, ຫນຶ່ງທີ່ເນັ້ນໃນໄລຍະກາງຂອງການແຍກຕົວຢ່າງ, ແລະຫນຶ່ງທີ່ເນັ້ນໃນຕອນທ້າຍຂອງອົງປະກອບ.

ສໍາລັບຕົວຢ່າງນີ້, ພວກເຮົາຈະແຍກໄຟລ໌ຄ້າຍກັບໄຟລ໌ RSS ທີ່ທໍາລາຍອົງປະກອບເປັນກຸ່ມພາຍໃຕ້ຫົວຂໍ້ຂອງ "ລາຍການ" ພາຍໃນເອກະສານ XML. ໃນຕອນເລີ່ມຕົ້ນຂອງການປຸງແຕ່ງ, ພວກເຮົາກໍາລັງກວດເບິ່ງຊື່ຂອງອົງປະກອບ "ລາຍການ" ແລະຈັດສັນລາຍການລາຍການຂອງພວກເຮົາເມື່ອພົບກຸ່ມໃຫມ່. ຖ້າບໍ່ດັ່ງນັ້ນ, ພວກເຮົາເລີ່ມຕົ້ນຕົວແປຂອງພວກເຮົາສໍາລັບມູນຄ່າ.

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

ນີ້ແມ່ນສ່ວນຫນຶ່ງທີ່ງ່າຍດາຍ. ໃນເວລາທີ່ພວກເຮົາຊອກຫາຕົວອັກສອນ, ພວກເຮົາພຽງແຕ່ເພີ່ມໃຫ້ກັບຕົວປ່ຽນ "ElementValue" ຂອງພວກເຮົາ.

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
ຖ້າ ([elementName isEqualToString: @ "item"]) {
[ບົດຄວາມ addObject: [item copy]]
} else {
[item 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"]