كيفية تحليل ملفات XML في Xcode

على الرغم من أن ملف XML يضيف المحلل قيمة حقيقية إلى تطبيق سطح مكتب أو جوال جديد ، ويتطلب ترميز هذه الوظيفة عادةً الكثير من وقت التطوير والاختبار التجريبي. يتضمن برنامج Xcode من Apple محلل XML الذي يتجاوز معظم هذا العمل اليدوي.

ان XML يمكن أن يحتوي الملف على أي شيء بدءًا من البيانات الأساسية حول تطبيقك وحتى ملف تغذية ار اس اس لموقع ويب. يمكن أن تكون أيضًا طريقة رائعة لتحديث المعلومات داخل تطبيقك عن بُعد ، وبالتالي تجاوز الحاجة إلى إرسال ثنائي جديد إلى Apple ببساطة لإضافة عنصر جديد إلى القائمة.

عملية Xcode

تحتوي عملية Xcode المضمنة على خطوات لتهيئة المتغيرات المراد استخدامها ، وبدء عملية محلل XML ، وتغذية معالجة الملف ، تقييم العناصر الفردية والشخصيات (القيمة) داخل تلك العناصر ، والتعرف على نهاية عنصر فردي ، وإنهاء الاعراب عملية.

استخدم محلل XML

لتوضيح التفاصيل ، سنقوم بتحليل ملف مثال من الإنترنت عن طريق تمرير عنوان ويب معين إليه (URL).

ابدأ ببناء ملف الرأس. هذا مثال لملف رأس أساسي جدًا لوحدة تحكم عرض التفاصيل مع الحد الأدنى من المتطلبات لتحليل ملفنا:

interface RootViewController: UITableViewController {
instagram viewer

DetailViewController * detailsViewController ؛
NSXMLParser * rssParser ؛
NSMutableArray * المقالات ؛
عنصر NSMutableDictionary * ؛
NSString * currentElement ؛
NSMutableString * ElementValue ؛
خطأ BOOL
}
property (nonatomic، retain) IBOutlet DetailViewController * detailsViewController ؛
- (باطل) parseXMLFileAtURL: (NSString *) URL ؛


تبدأ الدالة parseXMLFileAtURL العملية. عند الانتهاء ، تحتفظ "مقالات" NSMutableArray بالبيانات. تتكون المصفوفة من قواميس قابلة للتغيير مع مفاتيح تتعلق بأسماء الحقول في ملف XML.

بعد ذلك ، قم بتهيئة العملية:

- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "تم العثور على الملف وبدأ التحليل") ؛
}

تعمل هذه الوظيفة في بداية العملية. ليست هناك حاجة لوضع أي شيء في هذه الوظيفة ، ولكن إذا كنت تريد تنفيذ مهمة عند بدء تحليل الملف ، فهذا هو المكان الذي ستضع فيه التعليمات البرمجية الخاصة بك.

إرشاد البرنامج لتنزيل شيء ما

بعد ذلك ، وجه البرنامج لتنزيل شيء ما:

- (باطل) parseXMLFileAtURL: (NSString *) URL
{
NSString * agentString = @ "Mozilla / 5.0 (Macintosh؛ يو ؛ Intel Mac OS X 10_5_6 ؛ ar-us) AppleWebKit / 525.27.1 (KHTML ، مثل Gecko) الإصدار / 3.2.1 Safari / 525.27.1 "؛
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]] ؛
[طلب setValue: agentString forHTTPHeaderField: @ "User-Agent"]؛
xmlFile = [إرسال NSURLConnection sendSynchronousRequest: طلب returnResponse: خطأ لا شيء: لا شيء] ؛
Articles = [[تخصيص NSMutableArray] init]؛
تحليل الخطأ = لا ؛
rssParser = [[NSXMLParser تخصيص] initWithData: xmlFile]؛
[rssParser setDelegate: self] ؛
// قد تحتاج إلى تحويل بعضها بناءً على نوع ملف XML الذي تقوم بتحليله
[rssParser setShouldProcessNamespaces: NO] ؛
[rssParser setShouldReportNamespacePrefixes: NO] ؛
[rssParser setShouldResolveExternalEntities: NO] ؛
[تحليل rssParser] ؛
}


ترشد هذه الوظيفة المحرك إلى تنزيل ملف على عنوان ويب معين (URL) وبدء عملية تحليله. نحن نخبر الخادم البعيد بأننا عبارة عن Safari يعمل على جهاز Mac فقط في حالة محاولة الخادم إعادة توجيه iPhone / iPad إلى إصدار محمول.

الخيارات في النهاية خاصة بملفات XML معينة. لن تحتاج معظم ملفات RSS وملفات XML العامة إلى تشغيلها.

خطأ - تحقق من النتيجة

قم بإجراء بعض عمليات التحقق من الأخطاء الأساسية على النتيجة:

- (باطل) محلل: (NSXMLParser *) محلل محلل خطأ حدث: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Error code٪ i"، [parseError code]]؛
NSLog (@ "خطأ في تحليل XML:٪ @"، errorString)؛
errorParsing = نعم ،
} توجيه تدقيق الأخطاء هذا يعين قيمة ثنائية إذا واجه خطأ. قد تحتاج إلى شيء أكثر تحديدًا هنا اعتمادًا على ما تفعله. إذا كنت تحتاج ببساطة إلى تشغيل بعض التعليمات البرمجية بعد المعالجة في حالة حدوث خطأ ، فإن ملف


يعيّن إجراء فحص الأخطاء هذا قيمة ثنائية إذا واجه خطأ. قد تحتاج إلى شيء أكثر تحديدًا هنا اعتمادًا على ما تفعله. إذا كنت تحتاج ببساطة إلى تشغيل بعض التعليمات البرمجية بعد المعالجة في حالة الخطأ ، فيمكن استدعاء المتغير الثنائي لتحليل الخطأ في ذلك الوقت.

تحليل المحتوى المسترجع

بعد ذلك ، يقوم البرنامج بتقسيم المحتوى المسترجع وتحليله:

- (باطل) المحلل اللغوي: (NSXMLParser *) قام المحلل اللغوي StartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI المؤهل الاسم: (NSString *) qName الصفات: (NSDictionary *) attributeDict {
currentElement = [elementName copy] ؛
ElementValue = [[تخصيص NSMutableString] init]؛
إذا ([elementName isEqualToString: @ "item"]) {
item = [[تخصيص NSMutableDictionary] init]؛
}
}


يحتوي جزء المحلل اللغوي لـ XML على ثلاث وظائف ، واحدة تعمل في بداية الفرد عنصر ، واحد يتم تشغيله أثناء منتصف تحليل العنصر ، والآخر يعمل في نهاية جزء.

في هذا المثال ، سنقوم بتحليل ملف مشابه لملفات RSS التي تقسم العناصر إلى مجموعات تحت عنوان العناصر داخل ملف XML. في بداية المعالجة ، نتحقق من اسم العنصر "item" ونخصص قاموس العناصر لدينا عند اكتشاف مجموعة جديدة. خلافًا لذلك ، نقوم بتهيئة المتغير الخاص بنا للقيمة:

- (void) parser: (NSXMLParser *) وجد المحلل اللغوي الأحرف: (NSString *) string {
[ElementValue appendString: string]؛
}


عندما نجد الأحرف ، نضيفها ببساطة إلى المتغير الخاص بنا عنصر القيمة:

- (باطل) محلل: (NSXMLParser *) المحلل اللغوي فعل العنصر: (NSString *) elementName namespaceURI: (NSString *) namespaceURI المؤهل: (NSString *) qName {
إذا ([elementName isEqualToString: @ "item"]) {
[المقالات addObject: [item copy]]؛
} آخر {
[item setObject: ElementValue forKey: elementName] ؛
}
}

ماذا يحدث عند اكتمال الاعراب

عندما ينتهي البرنامج من معالجة عنصر ما ، يجب أن يقوم بأحد أمرين:

  • إذا كان عنصر النهاية هو العنصر، لقد انتهينا من مجموعتنا ، لذلك سنضيف قاموسنا إلى مجموعة مقالاتنا.
  • إذا كان العنصر ليس كذلك العنصر، سنقوم بتعيين القيمة في قاموسنا بمفتاح يطابق اسم العنصر. (هذا يعني أننا لسنا بحاجة إلى متغير فردي لكل حقل داخل ملف XML. يمكننا معالجتها بشكل ديناميكي أكثر.)

هذه هي الوظيفة الأخيرة اللازمة لروتين الإعراب لدينا ؛ ينهي المستند. ضع أي كود نهائي هنا أو حدد روتينًا فرعيًا لتصحيح الأخطاء:

- (void) parserDidEndDocument: (NSXMLParser *) parser {
إذا (خطأ التحليل == لا)
{
NSLog (@ "تم معالجة XML!") ؛
} آخر {
NSLog (@ "حدث خطأ أثناء معالجة XML") ؛
}
}

احفظ البيانات

شيء واحد قد ترغب العديد من التطبيقات في القيام به هنا هو حفظ البيانات أو ملف XML في ملف على الجهاز. بهذه الطريقة ، إذا لم يكن الجهاز متصلاً بالإنترنت في المرة التالية التي يتم فيها تحميل التطبيق ، فلا يزال بإمكانه الوصول إلى هذه المعلومات.

بالطبع ، لا يمكننا أن ننسى الجزء الأكثر أهمية: إخبار تطبيقك بتحليل الملف (وإعطائه عنوان ويب للعثور عليه!). لبدء العملية ، أضف هذا السطر من التعليمات البرمجية إلى المكان المناسب حيث تريد إجراء معالجة XML:

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