Xcode मध्ये XML फायली पार्स कसे करावे

अनेक अॅप्सचा आधारस्तंभ म्हणजे एक सोपा कार्य म्हणजे XML फायली विश्लेषित करण्याची क्षमता. आणि, सुदैवाने, Xcode हे Object-C मध्ये XML फाइल विश्लेषित करण्यास तुलनेने सोपे करते.

XML फाइलमध्ये आपल्या अॅप विषयी मूलभूत डेटा वेबसाइटसाठी एखाद्या RSS फीडमध्ये काहीही असू शकतात. ते आपल्या अॅपमध्ये दूरस्थपणे अद्ययावत करण्याचे एक उत्कृष्ट मार्ग असू शकतात, त्यामुळे ऍपलला एक नवीन बायनरी सादर करण्याची आवश्यकता टाळता येते जेणेकरून एका सूचीमध्ये नवीन आयटम जोडता येईल

त्यामुळे आम्ही एक्सकोडमध्ये XML फायली कशा प्रकारे कार्य करतो? प्रक्रियेत वापरण्यासाठी व्हेरिएबल्स इनिशियलाइज्ड करण्यासाठी काही उपाय आहेत, XML पार्सर प्रक्रिया सुरू करणे, फाईल प्रक्रिया करणे, वैयक्तिक घटकाची सुरूवात, घटकांमधील वर्ण (मूल्य) वैयक्तिक घटकाचे समाप्ती, आणि विश्लेषण प्रक्रियेचा अंत.

या उदाहरणात, आम्ही इंटरनेटवरून एक विशिष्ट वेब पत्ता ( URL ) पाठवून फाईलचे विश्लेषण करणार आहोत.

आपण हेडर फाईल बनवून सुरुवात करू. हे आमच्या फाइलचे विश्लेषण करण्याच्या किमान आवश्यकतांसह एका तपशील दृश्य नियंत्रकासाठी अतिशय मूलभूत शीर्षलेख फाइलचे उदाहरण आहे:

@interface RootViewController: UITableViewController {
तपशीलव्यूकंट्रोलर * तपशीलव्हीयुकंट्रोलर;

NSXMLParser * rssParser;
NSMutableArray * लेख;
NSMutableDictionary * आयटम;
NSString * चालू एलेमेंट;
NSMutableString * ElementValue;
बुल त्रुटी पेर्सिंग;
}

@ प्रॉपर्टी (नॉनॅटॉमिक, सेटलमेंट) IBOutlet DetailViewController * तपशील ViewController;

- (रिकामा) parseXMLFileAtURL: (NSString *) URL;

ParseXMLFileAtURL फंक्शन आपल्यासाठी प्रक्रिया सुरू करेल. हे पूर्ण झाल्यावर, NSMutableArray "लेख" आमच्या डेटा धारण करेल. अॅरे XML फायलीमधील फील्ड नावांशी संबंधित कीजांसह म्यूटेश्य शब्दसमूह बनले जातील.

आता आम्ही आवश्यक व्हेरिएबल्स सेट केल्या आहेत, आम्ही .m फाईलमधील प्रक्रिया पूर्ण करण्यासाठी पुढे जाऊ:

- (रिकामा) पेडरडीडस्टार्ट दस्तऐवज: (NSXMLParser *) पार्सर {
NSLog (@ "फाइल आढळली आणि पार्स करण्यास प्रारंभ");

}

हे फंक्शन प्रक्रिया सुरू झाल्यानंतर चालते. या फंक्शनमध्ये काहीही ठेवण्याची गरज नाही, परंतु जर आपण फाईल वाचण्यास सुरुवात केली तर तुम्हाला एखादे काम करायचे असेल तर येथेच आपण आपला कोड ठेवू.

- (रिकामा) parseXMLFileAtURL: (NSString *) URL
{

NSString * agentString = @ "मोजिला / 5.0 (मॅकिन्टोश; यू; इंटेल मॅक ओएस एक्स 10_5_6; एन-यू) ऍपल वेबकिट / 525.27.1 (केएचटीएमएल, जिएको प्रमाणे) आवृत्ती / 3.2.1 सफारी / 525.27.1";
NSMutableURLRequest * विनंती = [NSMutableURL विनंती विनंतीसहसह: URL:
[NSURL URLWithString: URL]];
[विनंती सेट करागुण: एजंटसाठी स्ट्रिंगएचटीटीपी हियरफिल्ड: @ "यूझर-एजंट"];
xmlFile = [NSURL कनेक्शनने पाठवावेसूचनासूचना: विनंती परतफेड: शून्य त्रुटी: शून्य];


लेख = [[एनएसएमयूटीएबलएआरआरएआर] सर्वत्र];
errorParsing = NO;

rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[आरएसएसपर्सर सेट डिलीगेट: स्व];

// आपण पार्सिंग करीत असलेल्या XML फाईल्सच्या प्रकारावर आधारित काही बदलू शकता
[आरएसएसपीआर सेटरल्ड प्रोसेसनामेस्पेसः नाही];
[आरएसएसपीआर सेटरॉल्डआरिपोर्टनमेशस्पेसप्रिफिक्सः नाही];
[आरएसएसएपर्सर सेटशेल्डरसॉलवेएक्सएनलअन्तेन्टिटी: नाही];

[आरएसएसपीर्स पार्स];

}

हे फंक्शन इंजिनला एका विशिष्ट वेब पत्त्यावर (URL) डाउनलोड करण्याची सूचना देते आणि ती पार्स करण्यासाठी प्रक्रिया सुरू करते.

आम्ही रिमोट सर्व्हरला सांगत आहोत की जर सर्व्हरने आयफोन / आयपॅडला मोबाइल आवृत्तीकडे पुनर्निर्देशित करण्याचा प्रयत्न केला तर आम्ही मॅकवर चालवित सफारी आहोत.

शेवटी काही पर्याय विशिष्ट XML फायलींसाठी विशिष्ट असतात. बहुतांश RSS फायली आणि सामान्य XML फायलींना त्यांना चालू करण्याची आवश्यकता नाही

- (रिक्त) विश्लेषक: (NSXMLParser *) विश्लेषक विश्लेषित करा (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "एरर कोड% i", [parseError कोड]];
NSLog (@ "त्रुटी पार्सिंग एक्सएमएल:% @", एररस्ट्रिंग);


errorParsing = होय;
}

ही एक सामान्य त्रुटी-तपासणी करण्याचे मार्ग आहे ज्यामुळे त्रुटीस बायनरी मूल्य सेट होईल. आपण काय करत आहात त्यावर अवलंबून आपल्याला येथे अधिक विशिष्ट गोष्टींची आवश्यकता असू शकते. त्रुटीच्या बाबतीत प्रक्रिया केल्यानंतर आपल्याला काही कोड चालवायची असल्यास, त्या वेळी त्रुटीवर्धक बायनरी व्हेरिएबल म्हटले जाऊ शकते.

(शून्य) विश्लेषक: (NSXMLParser *) पार्सर didStartElement: (NSString *) elementName नामस्पेसअरआय: (NSString *) नेमस्पेसअरआर योग्यनाम: (NSString *) qName विशेषता: (NSDictionary *) विशेषतासत्र {
currentElement = [घटक नाव कॉपी करा];
एलिमेंटव्हल्यू = [[एनएमयूटीएबल स्ट्रिंग एलोक] init];
जर ([घटकनाम EQUALToString: @ "आयटम"]) {
आयटम = [[एनएसएमयूटीएबलडीओ आबॉ.] एंट];

}

}

एक्सएमएल पार्टरचे मांस तीन कार्ये समाविष्ट करते, एका व्यक्तीच्या घटकाच्या सुरुवातीस चालणारे, घटक विश्लेषित करण्याच्या दरम्यान चालणार्या आणि घटकांच्या अंताला चालणारे एक.

या उदाहरणासाठी, आम्ही आरएसएस फाइल्स प्रमाणेच एक फाइल विश्लेषित करणार आहोत जी घटकांमधील घटक "XML" अंतर्गत "आयटम" च्या शीर्षकाखाली विभाजित करते. प्रक्रियेच्या सुरुवातीला, आम्ही "आयटम" घटक नाव तपासत आहोत आणि जेव्हा नवीन समूह सापडतो तेव्हा आमच्या आयटम शब्दकोशचे वाटप करत आहोत. अन्यथा, आम्ही व्हॅल्यूसाठी व्हेरिएबल इनिशियलाईज करतो.

- (शून्य) पार्सर: (NSXMLParser *) पार्सर सापडला आहेकर्तेः (NSString *) स्ट्रिंग {
[एलिमेंट व्हॅल्यू अॅडंडस्ट्रिंग: स्ट्रिंग];
}

हे सोपे भाग आहे. जेव्हा आपण अक्षर शोधत असतो, तेव्हा आपण ते आपल्या व्हेरिएबल "ElementValue" मध्ये जोडू.

- (रिकामा) विश्लेषक: (NSXMLParser *) पार्सरने एन्डेमेंट करा: (NSString *) घटक नाव नामस्थान ::
जर ([घटकनाम EQUALToString: @ "आयटम"]) {
[लेख जोडाव्यात: [आयटम कॉपी]];
} else {
[आयटम setObject: ElementValue forKey: elementName];
}

}

जेव्हा आपण एखाद्या घटकाची प्रक्रिया पूर्ण केली, तेव्हा आम्हाला दोन गोष्टींपैकी एक करण्याची आवश्यकता आहे: (1) शेवटचा घटक "आयटम" असल्यास, आम्ही आमचा गट पूर्ण केला आहे, त्यामुळे आम्ही आमच्या "आपल्या" श्रेणीचे शब्दकोश जोडू. ".

किंवा (2) घटक "आयटम" नसल्यास, आम्ही आमच्या शब्दकोशमधील मूल्य सेट करू ज्यामुळे घटकांच्या नावाशी जुळणारा एक कळ असेल. (याचा अर्थ असा की आम्हाला XML फाईलमधील प्रत्येक फिल्डसाठी स्वतंत्र व्हेरिएबलची आवश्यकता नाही.आम्ही त्यास अधिक गतिकरित्या प्रक्रिया करू शकतो.)

- (रिकामा) विश्लेषक दस्तऐवज: (NSXMLParser *) पार्सर {

जर (errorParsing == NO)
{
NSLog (@ "XML प्रक्रिया पूर्ण!");
} else {
NSLog (@ "XML प्रक्रिया दरम्यान त्रुटी आली");
}

}

हे आमचे पार्सिंग नियमानुसार आवश्यक शेवटचे कार्य आहे. हे केवळ कागदपत्र संपवते. आपण येथे प्रक्रिया पूर्ण करू इच्छित कोणताही कोड ठेवू किंवा त्रुटी बाबतीत करू शकता विशेष काही करू.

एक गोष्ट म्हणजे बरेच अॅप्स डेटा आणि / किंवा XML फाइलला डिव्हाइसवरील फाईलमध्ये जतन करणे आहे. त्याप्रमाणे, जर पुढच्या वेळी ते अनुप्रयोग लोड करतात तेव्हा वापरकर्त्याने इंटरनेटशी कनेक्ट केलेले नसल्यास, ते अजूनही या माहितीवर प्राप्त करु शकतात.

नक्कीच, आम्ही सर्वात महत्वाचा भाग विसरू शकत नाही: फाइलला विश्लेषित करण्यासाठी आपल्या अर्जाची माहिती देणे (आणि ते शोधण्यास एक वेब पत्ता देऊन!).

प्रक्रिया सुरू करण्यासाठी, आपल्याला या कोडची ही ओळ योग्य जागेवर जोडणे आवश्यक आहे जिथे आपण XML प्रक्रिया करणे आवश्यक आहे:

[स्वतः parseXMLFileAtURL: @ "http://www.webaddress.com/file.xml"];