ကောင်းတဲ့အချက်တွေရှိပါတယ်အတွက် XML ဖိုင်ဆန်းစစ်ဖို့ကိုဘယ်လို

အများအပြား apps များမှကျောရိုးကြောင်းတစ်ခုမှာရိုးရှင်းတဲ့လုပ်ငန်းတာဝန်က XML ဖိုင်များကိုဆန်းစစ်နိုင်စွမ်းဖြစ်ပါတယ်။ နှင့်အညီ, ကံကောင်းထောက်မစွာ, အချက်တွေရှိပါတယ် Objective-C တခု XML ဖိုင်ဆန်းစစ်ဖို့ကအတော်လေးလွယ်ကူစေသည်။

တစ်ဦး က XML ဖိုင်တစ်ခုမှသင့် app အကြောင်းအခြေခံ data ကိုမှတစုံတခုကိုမဆံ့နိုငျပါ RSS feed website တစ်ခုပါ။ သူတို့ကအစ, အရှင်ရိုးရှင်းစွာစာရင်းတစ်ခုအားအသစ်သောပစ္စည်းကိုထည့်သွင်းဖို့ Apple ကအသစ် binary တင်ပြရန်လိုအပ်ကြောင်းကျော်လွှား, အဝေးမှသင့်ရဲ့ app ကိုအတွင်းသတင်းအချက်အလက်ကို update မှာများစွာသောလမ်းရှိနိုင်ပါသည်။

ဒါကြောင့်ကျနော်တို့အချက်တွေရှိပါတယ်အတွက် XML ဖိုင်များကို process ဘူးဘယ်လို? လုပ်ငန်းစဉ်သည်ဒြပ်စင်အတွင်းမှာအသုံးပြုရရန် variable တွေကိုစတင်လုပ်ဆောင် XML ကို parser ကို process ကိုစတင်ကြောင်းဖြစ်စဉ်ကိုဖိုင်တစ်ဖိုင်, တစ်ဦးချင်းဒြပ်စင်ရဲ့ start, ဇာတ်ကောင် (တန်ဖိုး) အစာကျွေးဘို့ခြေလှမ်းများပါရှိသည် တစ်ဦးချင်းဒြပ်စင်၏အဆုံး, နှင့်ဆန်းစစ်မှုလုပ်ငန်းစဉ်၏အဆုံး။

ဒီဥပမာမှာကျနော်တို့ကအထူးသဖြင့် web address ကို (ဖြတ်သန်းနေဖြင့်အင်တာနက်ကိုကနေဖိုင်တစ်ဖိုင် parsing ပါလိမ့်မယ် URL ကို ) ။

ကျနော်တို့ header file ကိုထုတ်တည်ဆောက်ခြင်းနှင့်အတူစတင်ပါလိမ့်မယ်။ ဒါဟာကျွန်တော်တို့ရဲ့ဖိုင် parsing များအတွက်နိမ့်ဆုံးလိုအပ်ချက်နဲ့အသေးစိတ်ကြည့်ရန် Controller များအတွက်အလွန်အခြေခံ header ကိုဖိုင်ဥပမာတစ်ခုဖြစ်ပါသည်:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * ဆောင်းပါးများကို;
NSMutableDictionary * ကို item;
* currentElement NSString;
* ElementValue NSMutableString;
BOOL errorParsing;
}

@property (nonatomic, ကိုဆက်လက်ထိန်းသိမ်းရန်) IBOutlet DetailViewController * detailViewController;

- (ပျက်ပြယ်) parseXMLFileAtURL: (NSString *) URL ကို;

အဆိုပါ parseXMLFileAtURL function ကိုငါတို့အဘို့အလုပ်ငန်းစဉ်ကိုစတင်ပါလိမ့်မယ်။ ကပြီးသွားတဲ့အခါ, NSMutableArray "ဆောင်းပါးများကို" ကျွန်တော်တို့ရဲ့ဒေတာကိုကိုင်ထားမည်ဖြစ်သည်။ အဆိုပါစစ်ခင်းကျင်းသည့် XML ဖိုင်ထဲမှာလယ်ပြင်အမည်များနှင့်ဆက်စပ်သောသော့နှင့်အတူ mutable အဘိဓါန်များတက်စေပါလိမ့်မယ်။

ယခုငါတို့လိုအပ်သော variable တွေကိုဖွင့်လှစ်တော့ကျနော်တို့ .m file ကိုအတွက်လုပ်ငန်းစဉ်၏တွေ့ကြံဖို့အပေါ်ကိုရွှေ့ပါလိမ့်မယ်:

- (ပျက်ပြယ်) parserDidStartDocument: (NSXMLParser *) parser ကို {
NSLog (@ "File ကိုရှာတွေ့ခြင်းနှင့်ဆန်းစစ်မှုစတင်ခဲ့");

}

ဒီ function လုပ်ငန်းစဉ်၏အစမှာပြေး။ အဲဒီမှာဒီ function ကိုအတွက်ဘာမှထားရန်မလိုအပ်ဖြစ်ပါသည်, သို့သော်သင်ဖိုင်ကိုသရုပျခှဲခံရဖို့စတင်သည်တဲ့အခါတာဝန်လုပ်ဆောင်ချင်တယ်ဆိုရင်, ဒီသင်သည်သင်၏ကုဒ်သွင်းထားမယ်လို့ဘယ်မှာဖြစ်ပါတယ်။

- (ပျက်ပြယ်) parseXMLFileAtURL: (NSString *) URL ကို
{

NSString * agentString = @ "Mozilla က / 5.0 (ပါ Macintosh; ဦး; Intel ရဲ့ Mac OS X ကို 10_5_6; en-ကျွန်တော်တို့ကို) AppleWebKit / 525.27.1 (တောက်တဲ့နဲ့တူ KHTML) ဗားရှင်း / Safari က / 525.27.1 3.2.1";
NSMutableURLRequest * တောင်းဆိုမှုကို = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL ကို]];
[တောင်းဆိုမှုကို setValue: agentString forHTTPHeaderField: "အသုံးပြုသူ-အေးဂျင့်" @];
xmlFile = [NSURLConnection sendSynchronousRequest: တောင်းဆိုမှုကို returningResponse: nil အမှား: nil];


ဆောင်းပါးများ = [[NSMutableArray ခွဲဝေ] init];
errorParsing = NO;

rssParser = [[NSXMLParser ခွဲဝေ] initWithData: xmlFile];
[rssParser setDelegate: မိမိကိုယ်ကို];

// သင်ဆန်းစစ်နေကြသည် XML ဖိုင်အမျိုးအစားပေါ် မူတည်. ပေါ်ဤအကြောင်းအချို့ကိုဖွင့်ပေးရန်လိုအပ်ပါမည်
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[rssParser ဤဖွဲ့စည်းတည်ဆောက်မှုပုံစံ];

}

ဒီ function ဟာအထူးသဖြင့်ကို web လိပ်စာ (URL) မှာဖိုင်တစ်ဖိုင်ကို download လုပ်ပါက parsing ဘို့လုပ်ငန်းစဉ်စတင်ရန်အင်ဂျင်ညွှန်ကြားထားသည်။

ကျနော်တို့တစ် Safari ကဆာဗာက redirect ဖို့ကြိုးစားပါတယ်ရုံအမှု၌, Mac ပေါ်မှာ run နေသောဝေးလံခေါင်ဖျား server ကိုပြောပြနေတဲ့ iPhone / iPad မိုဘိုင်းဗားရှင်း။

အဆုံးမှာရွေးချယ်စရာအချို့ XML ကိုဖိုင်များကိုသီးခြားရှိပါတယ်။ အများစုမှာ RSS ကိုဖိုင်တွေနဲ့ယေဘုယျ XML ဖိုင်များကိုသူတို့အပျေါမှာလှည့်မလိုအပ်ပါလိမ့်မယ်။

- (ပျက်ပြယ်) parser ကို: (NSXMLParser *) parser ကို parseErrorOccurred: (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "အမှားကုဒ်% i" [parseError ကုဒ်]];
NSLog (@ "ဆန်းစစ်မှုအမှားက XML:% @", errorString);


errorParsing = YES;
}

ဒါဟာမှားယွင်းမှုတစ်ခုရင်ဆိုင်လျှင် binary value ကိုမသတ်မှတ်ပါလိမ့်မယ်တဲ့ရိုးရှင်းတဲ့အမှား-စစ်ဆေးနေလမ်းကြောင်းဖြစ်ပါတယ်။ သင်ဘာလုပ်နေတယ်ဆိုတာကိုပေါ် မူတည်. ဒီနေရာမှာပိုပြီးတိကျတဲ့တစ်ခုခုလိုအပ်နိုင်ပါသည်။ သငျသညျရိုးရိုးအမှား၏ဖြစ်ရပ်အတွက်အပြောင်းအလဲနဲ့အပြီးတချို့ code တွေကို run ရန်လိုအပ်လျှင်, errorParsing binary variable ကိုထိုအချိန်ကဟုခေါ်တွင်စေနိုင်ပါတယ်။

- (ပျက်ပြယ်) parser ကို: (NSXMLParser *) parser ကို didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName attributes: (NSDictionary *) attributeDict {
currentElement = [elementName မိတ္တူ];
ElementValue = [[NSMutableString ခွဲဝေ] init];
{: ([@ "item" elementName isEqualToString]) လျှင်
ကို item = [[NSMutableDictionary ခွဲဝေ] init];

}

}

XML ကို parser ကို၏အမဲသားကိုသုံး functions များ, တစ်ဦးချင်းဒြပ်စင်သည်ဒြပ်စင် parsing ၏အလယ်တွင်စဉ်အတွင်း run သောတဦးတည်း, နှင့်ဒြပ်စင်၏အဆုံးမှာ run သောတဦးတည်း၏အစအဦးမှာ run သောတဦးတည်းပါရှိသည်။

ဒီဥပမာအဘို့, ကျနော်တို့ XML ဖိုင်အတွင်း "ပစ္စည်း" ၏ခေါင်းစဉ်အောက်တွင်အုပ်စုများသို့ element တွေကိုဖြိုဖျက်ကြောင်း RSS ကိုဖိုင်များအလားတူဖိုင်တစ်ဖိုင် parsing ပါလိမ့်မယ်။ အဆိုပါအပြောင်းအလဲနဲ့ရဲ့ start မှာကျနော်တို့ဒြပ်စင်အမည် "ကို item" အတွက်စစ်ဆေးနေနှင့်အုပ်စုအသစ်တွေ့ရှိသောအခါကျွန်ုပ်တို့၏ကို item အဘိဓါန်ချထားပေးလျက်ရှိသည်။ ဒီလိုမှမဟုတ်ရင်ကျနော်တို့တန်ဖိုးကိုဘို့ငါတို့ variable ကိုစတငျ။

- (ပျက်ပြယ်) parser ကို: (NSXMLParser *) parser ကို foundCharacters: (NSString *) string ကို {
[ElementValue appendString: string ကို];
}

ဒါကလွယ်ကူသောအစိတ်အပိုင်းတစ်ခုဖြစ်ပါတယ်။ ကျနော်တို့ဇာတ်ကောင်ကိုရှာဖွေတဲ့အခါမှာကျနော်တို့ကရိုးရိုးကျွန်တော်တို့ရဲ့ variable ကို "ElementValue" သူတို့ကိုထည့်ပါ။

- (ပျက်ပြယ်) parser ကို: (NSXMLParser *) parser ကို didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
{: ([@ "item" elementName isEqualToString]) လျှင်
[ဆောင်းပါးများကို addObject: [ကို item] copy];
} အခြား {
[ကို item setObject: ElementValue forKey: elementName];
}

}

ကျနော်တို့က Element processing ပြီးသွားတဲ့အခါ, ငါတို့အရာနှစ်ခုထဲကတစ်ခုလုပ်ဖို့လိုအပ်: အဆုံးဒြပ်စင် "item" ပါလျှင် (1) ကျွန်ုပ်တို့၏အုပ်စုတစ်စုကိုလက်စသတ်တော့, ဒါကြောင့်ကျနော်တို့ဆောင်းပါးများ "ကြှနျုပျတို့ခင်းကျင်းရန်ကြောင့်ကျွန်တော်တို့၏အဘိဓါန် add ပါလိမ့်မယ် "။

၎င်းဒြပ်စင် "item" မပါလျှင်သို့မဟုတ် (2) ကျနော်တို့ဒြပ်စင်၏အမည်ကိုကိုက်ညီမယ့်သော့ချက်နှင့်အတူကြောင့်ကျွန်တော်တို့၏အဘိဓါန်အတွက်တန်ဖိုးမသတ်မှတ်ပါလိမ့်မယ်။ (ဤကျနော်တို့က XML ဖိုင်အတွင်းတစ်ဦးချင်းစီကိုလယ်များအတွက်တစ်ဦးချင်း variable ကိုမလိုအပ်ပါဘူး။ ကျနော်တို့ကနည်းနည်းပိုပြီးအင်တိုက်အားတိုက်သူတို့ကို process နိုင်ပါတယ်ဆိုလိုတယ်။ )

- (ပျက်ပြယ်) parserDidEndDocument: (NSXMLParser *) parser ကို {

(errorParsing == NO) ပါလျှင်
{
NSLog ( "XML ကိုအပြောင်းအလဲနဲ့ပြုမိ!" @);
} အခြား {
NSLog ( "မှားယွင်းနေသည် XML ကိုအပြောင်းအလဲနဲ့စဉ်အတွင်းဖြစ်ပွားခဲ့သည်" @);
}

}

ဒါဟာကျွန်တော်တို့ရဲ့ဆန်းစစ်မှုလုပ်ရိုးလုပ်စဉ်အဘို့အလိုပြီးခဲ့သည့် function ကိုဖြစ်ပါတယ်။ ဒါဟာရိုးရှင်းစွာစာရွက်စာတမ်းအဆုံးသတ်ထားသည်။ သင်သည်မည်သည့်သင်ဒီမှာလုပ်ငန်းစဉ်တက်ပြီးအောင်ချင်ကုဒ်သို့မဟုတ်သင်အမှား၏အမှု၌လုပ်ဖို့လိုလိမ့်မည်ကိုအထူးဘာမှမဝတ်ပါလိမ့်မယ်။

အများအပြား apps များကဒီမှာလုပ်ချင်လိမ့်မယ်အရာတစ်ခုမှာ device ကိုအပေါ်ဖိုင်တစ်ဖိုင်မှဒေတာများနှင့် / သို့မဟုတ် XML ဖိုင် save ဖို့ဖြစ်ပါတယ်။ အသုံးပြုသူအင်တာနက်သူတို့ app ကို load နောက်တစ်ကြိမ်ချိတ်ဆက်မပြုလုပ်လျှင်ထိုလမ်း, သူတို့နေဆဲဤအချက်အလက်မှာရနိုင်တယ်။

ဟုတ်ပါတယ်, ကျွန်တော်အရေးကြီးဆုံးအစိတ်အပိုင်းတစ်ခုမေ့လျော့တော်မနိုင်သည် (! ကြောင့်မှာရှာတွေ့မှဝဘ်လိပ်စာပေးခြင်း) ဖိုင်ကိုဆန်းစစ်ရန်သင့် application ကိုပြောပြ။

ထိုလုပ်ငန်းစဉ်စတင်ရန်, သင်ရိုးရှင်းစွာသင် XML ကိုအပြောင်းအလဲနဲ့လုပ်ချင်ဘယ်မှာသင့်လျော်သောနေရာအရပ်မှကုဒ်၏ဤလိုင်းထပ်ထည့်ဖို့လိုတယ်:

[မိမိကိုယ်ကို parseXMLFileAtURL: "http://www.webaddress.com/file.xml" @];