Միակ պարզ խնդիրն այն է, որ շատ ծրագրերի մայրուղին այն XML ֆայլերը վերլուծելու կարողություն է: Բարեբախտաբար, Xcode- ը համեմատաբար հեշտացնում է XML ֆայլը օբյեկտիվ-C- ում վերլուծել:
XML ֆայլը կարող է պարունակել ձեր հավելվածի հիմնական տվյալները ` RSS- ի համար կայքի համար: Նրանք կարող են նաեւ լինել հեռակա կարգով ձեր հավելվածում տեղեկությունների թարմացման լավ միջոց, այսպիսով շրջանցելով այն նոր բայթը Apple- ին ներկայացնելու համար, պարզապես ցուցակին նոր կետ ավելացնելու համար:
Այսպիսով, ինչպես ենք մենք մշակել XML ֆայլերը Xcode- ում: Գործընթացը պարունակում է փոփոխականների սկզբնավորման համար քայլեր, XML պերսերային գործընթացի սկիզբ, ֆայլի այդ գործընթացը կերակրելու, առանձին տարրի սկիզբը, տարրերի նիշերը (արժեքը) անհատ տարրի վերջը եւ վերլուծության գործընթացի ավարտը:
Այս օրինակում մենք ինտերնետից հանելու ենք ֆայլ `այն փոխանցելով որոշակի վեբ հասցե ( URL ):
Սկսենք կադրարկենք վերնագրի ֆայլը: Սա մանրամասն հիմնական տեսքի ֆայլի օրինակ է Մանրամասն Դիտել Controller- ի համար `մեր ֆայլը պարունակում է նվազագույն պահանջներ:
@interface RootViewController: UITableViewController {
DetailViewController * մանրամասնViewController;
NSXMLParser * rssParser;
NSMutableArray * հոդվածները;
NSMutableDictionary * կետ;
NSString * ընթացիկ գործողություն;
NSMutableString * ElementValue;
BOOL errorParsing;
}
@property (nonatomic, պահպանել) IBOutlet DetailViewController * detailViewController;
- (անվավեր) parseXMLFileAtURL: (NSString *) URL;
The parseXMLFileAtURL ֆունկցիան կսկսի գործընթացը մեզ համար: Երբ ավարտվում է, NSMutableArray- ի «հոդվածները» կանցկացնեն մեր տվյալները: Ժապավենը կազմվելու է փոփոխվող բառարաններից, XML ֆայլի դաշտի անունների հետ կապված բանալիներով:
Այժմ, երբ մենք ստեղծեցինք փոփոխականները, մենք կշարունակենք .m ֆայլում ընթացքի հանդիպումը:
- (անվավեր) parserDidStartDocument: (NSXMLParser *) parser {
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 * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[հարցում setValue: agentString համար HTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: խնդրանքը returningResponse: nil error: nil];
Հոդվածներ = [[NSMutableArray alloc] init];
errorParsing = NO;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: ինքնուրույն];
// Անհրաժեշտ է մի քանիսը դարձնել այն, կախված XML ֆայլի տեսակից, որը պարունակում է
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser- ը setShouldResolveExternalEntities- ը `NO];
[rssParser քննարկում];
}
Այս ֆունկցիան հրահանգ է տալիս շարժիչին ֆայլը ներբեռնել որոշակի վեբ հասցեում (URL) եւ սկսել այն վերլուծելու գործընթացը:
Մենք պատմում ենք հեռավոր սերվերին, որ մենք Mac- ում աշխատում ենք Safari- ի դեպքում, եթե սերվերը փորձում է վերափոխել iPhone / iPad- ը բջջային տարբերակով:
Վերջնական տարբերակները որոշակի XML ֆայլերի համար հատուկ են: RSS ֆայլերի եւ ընդհանուր XML ֆայլերի մեծամասնությունը նրանց կարիք չի ունենա:
- (անվավեր) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Error code% i", [parseError կոդ]];
NSLog (@ "Սխալը վերլուծելով XML:% @", errorString);
errorParsing = YES;
}
Սա պարզ սխալի ստուգման երթուղայնացում է, որը սահմանում է երկուական արժեք, եթե այն հանդիպում է սխալ: Կարող եք գուցե ավելի կոնկրետ բան պահանջել, կախված այն բանից, թե ինչ եք անում: Եթե դուք պարզապես պետք է գործածել որոշ կոդ, սխալի դեպքում մշակելուց հետո, ապա errorParsing երկուական փոփոխականը կարելի է անվանել այդ ժամանակ:
(NSString *) namespaceURI qualifiedName: (NSString *) qName հատկանիշները (NSDictionary *) attributeDict {
currentElement = [elementName copy];
ElementValue = [[NSMutableString alloc] init];
եթե ([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];
}
}
XML պերսերի միսը պարունակում է երեք գործառույթ, մեկը, որը սկսում է առանձին տարրերի սկզբում, մեկը, որը տարվում է տարրը վերլուծելու կեսին եւ մեկը, որը գործում է տարրերի վերջում:
Այս օրինակում մենք պետք է վերլուծենք այնպիսի ֆայլեր, ինչպիսիք են RSS ֆայլերը, որոնք տարրեր են բաժանում խմբերի XML ֆայլի մեջ գտնվող «տարրերի» վերնագրի ներքո: Վերամշակման մեկնարկի ընթացքում մենք ստուգում ենք տարրերի անվանման «կետը» եւ բովանդակության բառարանի բաշխումը, երբ հայտնաբերվում է նոր խումբ: Հակառակ դեպքում, մենք սկսում ենք փոփոխության արժեքը:
- (անվավեր) parser: (NSXMLParser *) parser գտել Չարիքեր: (NSString *) string {
[ElementValue appendString: string];
}
Սա հեշտ մասն է: Երբ մենք գտնում ենք հերոսներ, մենք պարզապես դրանք ավելացնում ենք «ElementValue» փոփոխականին:
(NSString *) namespaceURI qualifiedName: (NSString *) qName {(NSString *)) (nSString *) parser- ը (nSString *) elementName namespaceURI:
եթե ([elementName isEqualToString: @ "item"]) {
[հոդվածներ addObject: [կետի պատճեն]];
} else {
[item setObject: ElementValue forKey: elementName];
}
}
Երբ մենք ավարտում ենք տարրը, մենք պետք է անենք երկու բաներից մեկը. (1) եթե վերջնական տարրը «կետ» է, մենք ավարտել ենք մեր խումբը, այնպես որ մենք ավելացնենք մեր բառարանը «հոդվածներ»: »:
Կամ 2) եթե տարրը «առարկա» չէ, մենք արժեքը սահմանում ենք մեր բառապաշարով, որը համապատասխանում է տարրերի անունին: (Սա նշանակում է, որ XML ֆայլի մեջ յուրաքանչյուր դաշտի համար անհատական փոփոխական կարիք չկա, մենք կարող ենք դրանք մի փոքր ավելի դինամիկ մշակել:)
- (անվավեր) parserDidEndDocument: (NSXMLParser *) parser {
եթե (errorParsing == NO)
{
NSLog (@ "XML մշակման արված!");
} else {
NSLog (@ "XML- ի մշակման ընթացքում սխալ տեղի ունեցավ");
}
}
Սա վերջին գործառույթն է, որն անհրաժեշտ է մեր վերլուծության ընթացակարգի համար: Դա պարզապես ավարտվում է փաստաթուղթը: Դուք կստանաք ցանկացած կոդ, որը ցանկանում եք ավարտել գործընթացը այստեղ կամ որեւէ հատուկ բան, որը դուք կարող եք անել սխալի դեպքում:
Մի բան, որ շատ ծրագրեր կարող են անել այստեղ, սարքի վրա ֆայլը տվյալների եւ / կամ XML ֆայլերի պահպանումը: Այսպիսով, եթե օգտագործողը ինտերնետին միացված չէ, հաջորդ անգամ նրանք բեռնաթափում են ծրագիրը, նրանք դեռ կարող են ստանալ այդ տեղեկությունները:
Անշուշտ, մենք չենք կարող մոռանալ ամենակարեւոր մասի մասին `պատմել ձեր դիմումը ֆայլը վերանայելու համար (եւ այն տալով վեբ հասցե` գտնելու համար:):
Գործընթացը սկսելու համար պարզապես անհրաժեշտ է ավելացնել այս տողը համապատասխան վայրում, որտեղ ցանկանում եք կատարել XML մշակման գործընթացը.
[ինքնուսույց XMLFileAtURL: @ "http://www.webaddress.com/file.xml"];