XX- ში XML ფაილების გაშიფვრა

ერთი მარტივი ამოცანაა, რომელიც მრავალი აპლიკაციის ხერხემალია XML ფაილების დასამატებლად. და, საბედნიეროდ, Xcode ხდის შედარებით ადვილად parse XML ფაილი Objective-C.

XML ფაილი შეიძლება შეიცავდეს არაფერს არსებულ მონაცემებს თქვენი აპლიკაციისთვის RSS feed- ისთვის ვებ-გვერდზე. ისინი ასევე შეიძლება იყოს დიდი გზა განაახლოს ინფორმაცია თქვენი app დისტანციურად, რითაც გვერდის ავლით საჭიროება წარმოადგინოს ახალი ორობითი რომ Apple უბრალოდ დაამატოთ ახალი ნივთი სიაში.

ასე რომ, როგორ ვწერთ XML ფაილებს Xcode- ში? პროცესი შეიცავს ცვლადების ინიციალიზებას, დაწყებული XML- ის პროცედურის დაწყებამდე, რომელიც ამუშავებს ფაილს, ინდივიდუალური ელემენტის დაწყებას, ელემენტის (ღირებულებას) ელემენტს, ინდივიდუალური ელემენტის დასასრული და დამუშავების პროცესის დასასრული.

ამ მაგალითში ჩვენ ვიქნებით ინტერნეტის ფაილში პაროლის გადატანა კონკრეტული ვებ-მისამართის ( URL ) გავლით.

ჩვენ დავიწყებთ სათაურის ფაილში შესაქმნელად. ეს არის მაგალითი ძირითადი სათაური ფაილის დეტალური ნახვა Controller მინიმალური მოთხოვნები parsing ჩვენი ფაილი:

@ ინტერფეისი RootViewController: UITableViewController {
დეტალურიViewController * დეტალურად ViewController;

NSXMLParser * rssParser;
NSMutableArray * სტატიები;
NSMutableDictionary * პუნქტი;
NSString * მიმდინარე ჩართვა;
NSMutableString * ElementValue;
BOOL შეცდომის გაუქმება;
}

@property (nonatomic, შეინარჩუნოს) IBOutlet დეტალური ViewController * დეტალურად ViewController;

- (ბათილად) parseXMLFileAtURL: (NSString *) URL;

ParseXMLFileAtURL ფუნქცია დაიწყებს პროცესს ჩვენთვის. როდესაც ეს დასრულდება, NSMutableArray "სტატიები" გამართავს ჩვენს მონაცემებს. მასივი შედგება mutable ლექსიკონებისგან XML ფაილში საველე სახელებითან დაკავშირებული გასაღებებით.

ახლა, როდესაც ჩვენ შევქმნათ ცვლადები საჭიროა, გადავდივართ პროცესის პროცესში. M ფაილი:

- (ბათილად) parserDidStartDocument: (NSXMLParser *) დამწყები {
NSLog (@ "ფაილი ნაპოვნია და დამუშავება დაიწყო");

}

ეს ფუნქცია დამუშავების პროცესშია. ამ ფუნქციაში არაფერია საჭირო, მაგრამ თუ გსურთ შეასრულოთ დავალება, როდესაც ფაილი იწყებს გაანალიზებას, ეს არის ის, სადაც თქვენი კოდი იქნება.

- (ბათილად) parseXMLFileAtURL: (NSString *) URL
{

NSString * AgentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, როგორც Gecko) ვერსია / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * მოთხოვნა = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[მოთხოვნის setValue: agentString forHTTPHeaderField: @ "მომხმარებელი აგენტი"];
xmlFile = [NSURLConnection sendSynchronousRequest: მოთხოვნის დაბრუნებისას პასუხი: nil შეცდომა: 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];

}

ეს ფუნქცია აწვდის ძრავას, რომ გადმოწეროს ფაილი კონკრეტულ ვებ-მისამართზე (URL) და დაიწყება პროცესი მისი გაანგარიშებისათვის.

ჩვენ ვეუბნებით დისტანციური სერვერს, რომ ჩვენ ვართ Safari გაშვებული Mac- ზე, თუ სერვერი ცდილობს iPhone / iPad- ის მობილური ვერსიის გადამისამართებას ცდილობს.

საბოლოო ვარიანტები კონკრეტული XML ფაილების სპეციფიკურია. ყველაზე RSS ფაილი და ზოგადი XML ფაილი არ სჭირდება მათ ჩართული.

- (ბათილად) დამწყებთათვის: (NSXMLParser *) პარკერი parseErrorOccurred: (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "შეცდომის კოდი% i", [parseError კოდი];
NSLog (@ "შეცდომა parsing XML:% @", errorString);


errorParsing = YES;
}

ეს არის მარტივი შეცდომის შემოწმების მარშრუტი, რომელიც იქმნება ორობითი ღირებულებით, თუ ის შეშფოთებას იწვევს. საჭიროა რაღაც უფრო კონკრეტული აქ, რაც დამოკიდებულია იმაზე, რასაც აკეთებთ. თუ თქვენ უბრალოდ საჭიროა შეცდომის დამუშავების შემდეგ გარკვეული კოდის გაშვება, შეცდომის გაუქმება შესაძლებელია იმ დროისთვის.

(NSSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName ატრიბუტები: (NSDictionary *) attributeDict {
currentElement = [elementName ასლი];
ElementValue = [[NSMutableString alloc] init];
თუ [(ელემენტის სახელიაააააააააააააააააააააააააააააააააააააა მოცემული)
item = [[NSMutableDictionary alloc] init];

}

}

XML Parser- ის ხორცს აქვს სამი ფუნქცია, რომელიც იწყება ინდივიდუალური ელემენტის დასაწყისში, რომელიც გადის ელემენტთა გაშიფვრის შუალედში და ის, რაც ელემენტის ბოლოს გადის.

ამ მაგალითში ჩვენ ვიყენებთ ფაილს RSS ფაილით, რომლებიც XML ფაილში "ელემენტი" სასაქონლო პოზიციის ქვეშ მყოფ ელემენტებს ჩამოაშორებენ. დამუშავების დაწყებისას ჩვენ შევამოწმებთ ელემენტის სახელს "ნივთს" და ჩვენს ერთეულს გამოყოფს ახალი ჯგუფის გამოვლენისას. წინააღმდეგ შემთხვევაში, ჩვენ ვცვლით ჩვენი ცვლადის მნიშვნელობას.

- (ბათილად) დამწყებთათვის: (NSXMLParser *) დამწყებთათვის დამკვრელები: (NSString *) სიმებიანი {
[ElementValue appendString: სიმებიანი];
}

ეს არის მარტივი ნაწილი. როდესაც ჩვენ მოვძებნით სიმბოლოებს, ჩვენ უბრალოდ დავამატებთ ჩვენს ცვლად "ElementValue".

- (ბათილად) დამწყებთათვის: (NSXMLParser *) დამწყებთათვის: გაკვეთილი: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
თუ [(ელემენტის სახელიაააააააააააააააააააააააააააააააააააააა მოცემული)
[სტატიები addObject: [ნივთის ასლი]];
} სხვა {
[item setObject: ElementValue forKey: elementName];
}

}

ელემენტის დამუშავების დასრულებისას ჩვენ უნდა გავაკეთოთ ორი რამ: 1) თუ საბოლოო ელემენტია "ელემენტი", დავამთავრეთ ჩვენი ჯგუფი, ამიტომ ჩვენ დავამატებთ ჩვენს ლექსიკონს "სტატიების" ".

ან (2) თუ ელემენტი არ არის "პუნქტი", ჩვენ დავაყენებთ მნიშვნელობას ჩვენს ლექსიკონში, რომელიც შეესაბამება ელემენტის სახელს. (ეს იმას ნიშნავს, რომ ჩვენ არ გვჭირდება ინდივიდუალური ცვლადი თითოეული ველში XML ფაილში, ჩვენ შეგვიძლია გავამარტივოთ ისინი უფრო დინამიურად.)

- (ბათილია) parserDidEndDocument: (NSXMLParser *) დამწყები {

თუ (errorParsing == არა)
{
NSLog (@ "XML დამუშავება გაკეთდა!");
} სხვა {
NSLog (@ "შეცდომა XML დამუშავების დროს მოხდა");
}

}

ეს არის ბოლო ფუნქცია, რომელიც საჭიროა ჩვენი გაცვლითი რუტინული. უბრალოდ მთავრდება დოკუმენტი. თქვენ დააყენებთ ნებისმიერ კოდს, რომლითაც გსურთ პროცესის დასრულება ან რაიმე განსაკუთრებული რამ, რაც შეიძლება დაგჭირდეთ შეცდომის შემთხვევაში.

ერთი რამ, რაც შეიძლება ბევრი აპლიკაცია დაგჭირდეთ, აქ არის მონაცემების შენახვა და / ან XML ფაილის მოწყობილობაზე ფაილში. ამ გზით, თუ მომხმარებელი არ უკავშირდება ინტერნეტს, ისინი ახლა ატვირთავთ აპს, ისინი მაინც მიიღებენ ამ ინფორმაციას.

რა თქმა უნდა, არ შეიძლება დაგვავიწყდეს ყველაზე მნიშვნელოვანი ნაწილი: ვეუბნებოდი თქვენს აპლიკაციას პაროლისთვის (და მისთვის სასურველი ვებ-მისამართის მოძებნა).

პროცესის დასაწყებად თქვენ უბრალოდ უნდა დაამატოთ ამ კოდის კოდექსი შესაბამის ადგილას, სადაც გსურთ XML დამუშავება:

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