एक्सकोडमा XML फाइलहरू कसरी पार्स गर्ने?

धेरै सरल कार्यहरू जुन धेरै एप्समा ब्याकबोन हो XML फाइलहरू पार्स गर्ने क्षमता हो। र, सौभाग्य देखि, एक्सकोडले यसलाई अपेक्षाकृत सजिलो बनाउँछ उद्देश्य-सीमा XML फाइल पार्स गर्न।

एक XML फाईलले वेबसाइटको लागि आरएसएस फिडमा तपाईंको अनुप्रयोगको बारेमा आधारभूत डेटाबाट केहि पनि समावेश गर्न सक्छ। तिनीहरू पनि तपाईंको एप भित्र जानकारी अद्यावधिक गर्न एक शानदार तरिका हुन सक्छ, यसैले सूचीमा नयाँ वस्तु थप्न एप्पलमा नयाँ बाइनरी पेश गर्नु आवश्यक छ।

त्यसोभए हामी एक्सकोड फाइलहरू एक्सकोडमा कसरी प्रसोधन गर्छौं? यो प्रक्रियाले प्रयोग गर्न चरहरू सुरू गर्न चरणहरू समावेश गर्दछ, एक्सएमएल पार्सर प्रक्रिया सुरू गर्न, त्यो प्रक्रियालाई फाईल गर्ने, एक व्यक्तिगत तत्वको सुरुवात, तत्व भित्रको मान (मान) एक व्यक्तिगत तत्व को अन्त, र पार्सिंग प्रक्रिया को अन्त।

यस उदाहरणमा, हामी एक विशेष वेब ठेगाना ( URL ) पास गरेर इन्टरनेटबाट फाईल पार्सिनेछौं।

हामी हेडर फाइल निर्माण गर्न सुरु गर्नेछौं। यो एक विस्तृत आधार हेडर फाईल को विस्तार को लागी न्यूनतम आवश्यकताहरु संग एक विस्तृत हेड कंट्रोलर को एक उदाहरण हो:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * लेख;
NSMutableDictionary * वस्तु;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL त्रुटिपट्टी;
}

@property (nonatomic, retain) IBOutlet DetailViewController * detailViewController;

- (शून्य) parseXMLFileAtURL: (NSString *) यूआरएल;

पेस XMLFileAtURL प्रकार्यले हाम्रो लागि प्रक्रिया सुरु गर्नेछ। जब यो समाप्त हुन्छ, NSMutableArray "लेखहरू" ले हाम्रो डेटा कायम राख्नेछ। सरणी एक्सएमएल फाइलमा फिल्ड नामहरूसँग सम्बन्धित कुञ्जीहरू संग उत्परिवर्ती शब्दकोशहरू बनाइनेछ।

अब जुन हामीले चरहरू सेट अप गरेका छौं, हामी .m फाइलमा प्रक्रियाको पूरा गर्न उत्प्रेरित गर्नेछौँ:

- (शून्य) पार्सरडिड स्टार्ट कागजात: (एनएसएक्सएमएलपर्सर *) पार्सर {
NSLog (@ "फाइल फेला पर्यो र पार्सिङ सुरु");

}

यो प्रकार्य प्रक्रियाको सुरुमा चल्छ। यस प्रकार्यमा कुनै पनि चीज राख्ने कुनै पनि आवश्यकता छैन, तर यदि फाइल पार्स लगाउन सुरु गर्दा तपाईं कार्य गर्न चाहानुहुन्छ, यो तपाई जहाँ तपाईको कोड राख्नुहुन्छ।

- (शून्य) parseXMLFileAtURL: (NSString *) यूआरएल
{

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


लेख = [[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];

}

यो प्रकार्यले विशेष वेब ठेगाना (URL) मा फाईल डाउनलोड गर्न इन्जिनलाई निर्देशन दिन्छ र यसलाई पार्सिङका लागि प्रक्रिया सुरू गर्दछ।

हामी रिमोट सर्भरलाई बताइरहन्छौँ कि हामी म्याककोमा सफारी चलिरहेको छौँ, किनकि सर्भरले मोबाइल संस्करणमा आईफोन / आईप्याड पुन: निर्देश गर्न प्रयास गर्दछ।

अन्त्यमा विकल्प निश्चित XML फाइलहरूको लागि विशिष्ट छन्। प्राय: आरएसएस फाईलहरू र जेनेरिक XML फाईलहरूलाई तिनीहरूलाई खोल्न आवश्यक पर्दैन।

- (शून्य) पार्सर: (NSXMLParser *) पार्सर पार्स ErrorOccurred: (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "त्रुटि कोड% i", [parseError code]];
NSLog (@ "XML पार्सिङ त्रुटि:% @", त्रुटि स्ट्रिङ);


errorParsing = YES;
}

यो एक सरल त्रुटि हो - मार्गमा जाँच्ने हो कि बाइनरी मान सेट हुनेछ यदि यो त्रुटिको सामना गर्दछ। तपाईले के गर्दै हुनुहुन्छ भन्ने आधारमा तपाईलाई थप विशिष्ट यहाँ आवश्यक पर्न सक्छ। यदि तपाइँ केवल त्रुटिको अवस्थामा प्रक्रिया प्रशोधन पछि केही कोड चलाउन आवश्यक छ भने, त्रुटि पर्सिङ बाइनरी चर को समयमा यो समयमा भन्न सकिन्छ।

- (शून्य) पार्सर: (NSXMLParser *) पार्सर गरेStartElement: (NSString *) elementName नामस्पेसयूआरई: (NSString *) नामस्थानसुरयूआईआईटी नाम: (NSString *) q नाम विशेषताहरू: (NSDictionary *) विशेषता {
currentElement = [elementName प्रतिलिपि];
ElementValue = [[NSMutableString Alloc] init];
यदि ([elementName isEqualToString: @ "item"])) {
वस्तु = [[NSMutableDictionary आवरण] init];

}

}

XML पार्सरको मासु तीनवटा प्रकार्य समावेश गर्दछ, जुन एक व्यक्ति तत्वको सुरुमा दौड्छ, जुन तत्वको पार्श्वको बीचमा हुन्छ र तत्वको अन्त्यमा चल्छ।

यस उदाहरणका लागि, हामी आरएसएस फाईलहरू जस्तै फाईल पार्सिरहेका छौं जुन एक्सएमएल फाइल भित्र "वस्तुहरू" शीर्षक अन्तर्गत समूहहरूमा तत्वहरू तोक्नुहोस्। प्रशोधनको सुरूमा, हामी तत्व नाम "वस्तु" को लागि जाँच गर्दैछौँ र नयाँ वस्तु पत्ता लगाइएमा हाम्रो वस्तु शब्दकोशको आवंटित गर्दैछौँ। अन्यथा, हामी मूल्यको लागि हाम्रो चर आरम्भ गर्छौं।

- (शून्य) पार्सर: (एनएसएक्सएमएलपर्सर *) पार्सर भेटियोप्रकृति: (NSString *) string {
[ElementValue AppendString: string];
}

यो सजिलो भाग हो। जब हामीले क्यारेक्टरहरू पत्ता लगाउँछौं, हामी तिनीहरूलाई उनीहरूको चरम "एलिजाईकल" मा थप्नुहोस्।

- (शून्य) पार्सर: (NSXMLParser *) पार्सर गरेEndElement: (NSString *) elementName नामस्पेसयूआर: (NSString *) नामस्थानसुरक्षित नाम: (NSString *) qName {
यदि ([elementName isEqualToString: @ "item"])) {
[लेख थप गर्नुहोस्अबject: [वस्तु प्रतिलिपि]];
} else {
[वस्तु सेट ओब्जेक्ट: के लिए तत्व विलयनकु: elementName];
}

}

जब हामीले एक प्रकृया प्रशोधन गर्यौं, हामीले दुई चीजहरू गर्न आवश्यक छ: (1) यदि अन्त्य तत्व "वस्तु" हो भने, हामीले हाम्रो समूह समाप्त गर्यौं, त्यसैले हामी हाम्रा सङ्ग्रहको लेखमा हाम्रो शब्दकोश थप्न सक्नेछौं। "।

वा (2) यदि तत्व "आइटम" होइन भने, हामी हाम्रो शब्दकोशमा मान एक कुञ्जीसँग सेट गर्नेछ जुन तत्वको नामसँग मेल खान्छ। (यसको मतलब हामी एक्सएमएल फाइल भित्र प्रत्येक क्षेत्र को लागि एक चर चर को आवश्यकता छैन।

- (शून्य) पार्सरडिडडीड कागजात: (एनएसएक्सएमएलपर्सर *) पार्सर {

यदि (errorParsing == NO)
{
NSLog (@ "XML प्रसोधन गरियो!");
} else {
NSLog (@ "XML प्रसोधनको समयमा त्रुटि भयो");
}

}

यो हाम्रो पार्सिङ नियमितको लागि आवश्यक अन्तिम प्रकार्य हो। यसले मात्र कागजात समाप्त गर्छ। तपाइँ कुनै पनि कोड राख्नुहुन्छ जसलाई तपाइँ प्रक्रिया प्रक्रिया समाप्त गर्न चाहनुहुन्छ वा त्रुटिको अवस्थामा तपाईँले के गर्न चाहानुहुन्छ जुन विशेष गर्न चाहानुहुन्छ।

एक कुराले धेरै अनुप्रयोगहरू यहाँ गर्न चाहन सक्छ डेटा र / वा XML फाइललाई यन्त्रमा फाइल बचत गर्न। त्यस तरिका, यदि प्रयोगकर्ता इन्टरनेट लोड गर्न अर्को पटक इन्टरनेटमा जडान गरिएको छैन भने, तिनीहरू अझै पनि यस जानकारीमा प्राप्त गर्न सक्छन्।

निस्सन्देह, हामी सबैभन्दा महत्त्वपूर्ण भागलाई बिर्सन सक्दैनौं: फाइललाई पार्स गर्नका लागि तपाइँको अनुप्रयोगलाई बताउनुहोला (र यसलाई पत्ता लगाउने एउटा वेब ठेगाना दिनुहोस्!)।

प्रक्रिया सुरू गर्न, तपाईलाई कोडको यो लाइनलाई उपयुक्त ठाँउमा थप्न आवश्यक छ जहाँ तपाईं XML प्रशोधन गर्न चाहनुहुन्छ:

[आत्म पार्स XML फाइल फाइल: @ "http://www.webaddress.com/file.xml"];