Ինչպես կարելի է բաժանել XML ֆայլերը Xcode- ում

Միակ պարզ խնդիրն այն է, որ շատ ծրագրերի մայրուղին այն 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"];