Yuav ua li cas Parse XML ntaub ntawv nyob rau hauv Xcode

Ib qho yooj yim hauj lwm uas yog lub pob txig rau ntau lub apps yog lub peev xwm los sib piv cov ntaub ntawv XML. Thiab, zoo hmoo, Xcode ua rau nws kuj yooj yim rau parse ua XML ntaub ntawv hauv Objective-C.

XML ntaub ntawv yuav muaj txhua yam ntawm cov ntaub ntawv yooj yim txog koj app rau RSS pub rau ib lub website. Lawv kuj yog ib txoj kev zoo rau kev muab kho dua cov ntaub ntawv hauv koj lub apps, yog li bypassing qhov xav tau xa cov tshiab binary rau Apple tsuas ntxiv ib yam tshiab rau ib daim ntawv teev.

Li ntawd, peb yuav ua cov txheej txheem XML hauv Xcode li cas? Cov txheej txheem muaj cov kauj ruam rau initialization lub zog siv, pib XML parser txheej txheem, pub tus txheej txheem ntawm cov ntaub ntawv, pib ntawm tus neeg caij, cov cim (tus nqi) qhov kawg ntawm tus neeg caij, thiab qhov kawg ntawm kev parsing.

Hauv qhov ua piv txwv no, peb yuav parsing cov ntaub ntawv hauv Internet los ntawm kev xa nws qhov chaw nyob hauv qhov web ( URL ).

Peb mam li pib nrog lub tsev tawm cov ntaub ntawv header. Qhov no yog ib qho piv txwv ntawm cov ntaub ntawv yooj yim heev rau Kev Tshaj Tawm Saib Tshawb xyuas nrog yam tsawg kawg nkaus rau parsing peb cov ntaub ntawv:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * cov khoom;
NSMutableDictionary * yam khoom;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL yuam kevParsing;
}

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

- (void) parseXMLFileAtURL: (NSString *) URL;

Qhov kev ua haujlwm parseXMLFileAtURL yuav pib txheej txheem rau peb. Thaum nws tiav, NSMutableArray "cov khoom" yuav tuav tau peb cov ntaub ntawv. Cov array yuav ua los ntawm cov dictaries mutable nrog rau cov yuam sij uas muaj feem xyuam rau cov npe hauv XML hauv cov ntaub ntawv XML.

Tam sim no hais tias peb tau teeb lub zog ntxiv, peb yuav tsiv mus nyob rau ntawm cov txheej txheem hauv cov ntaub ntawv .m:

- (khoob lug) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Cov ntaub ntawv pom thiab pib parsing");

}

Qhov no muaj nuj nqi pib thaum pib ntawm txoj haujlwm. Yuav tsis muaj dab tsi nyob rau hauv no muaj nuj nqi, tab sis yog tias koj xav ua hauj lwm thaum cov ntaub ntawv pib rau parsed, qhov no yog qhov uas koj yuav muab koj cov cai.

- (void) parseXMLFileAtURL: (NSString *) URL
{

NString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, zoo li Gecko) Version / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * thov = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[thov setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: thov rov qab rov qab tawm lus: nil yuam kev: nil];


cov khoom = [[NSMutableArray alloc] init];
errorParsing = TSIS MUAJ;

rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: nws tus kheej];

/ / Koj yuav tau xa qee yam ntawm cov nyob ntawm seb hom XML ntawv koj parsing
[rssParser setShouldProcessNamespaces: tsis];
[rssParser setShouldReportNamespacePrefixes: TSIS MUAJ];
[rssParser setShouldResolveExternalEntities: TSIS MUAJ];

[rssParser parse];

}

Qhov kev ua no instructs lub cav mus download tau ib cov ntaub ntawv ntawm ib lub vev xaib (URL) thiab pib cov txheej txheem rau parsing nws.

Peb tab tom hais rau cov neeg siv kev sib txuas lus uas peb muaj Safari khiav ntawm Mac yog thaum tus neeg ua hauj lwm sim redirect tus iPhone / iPad rau ib lub xov tooj ntawm tes.

Cov kev xaiv kawg yog hais txog qee cov ntaub ntawv XML. Feem ntau cov ntaub ntawv los ntawm RSS thiab cov ntaub ntawv xaa cov XML yuav tsis xav kom lawv qhib.

- (void) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "yuam kev code% i", [parseError code]];
NSLog (@ "yuam kev parsing XML:% @", errorString);


errorParsing = YES;
}

Qhov no yog qhov yuam kev-khij qhov uas yuav ua kom muaj nuj nqi binary yog tias nws ntsib qhov yuam kev. Tej zaum koj yuav xav tau ib yam dab tsi ntxiv ntawm no nyob ntawm seb koj ua dab tsi. Yog hais tias koj tsuas xav khiav qee txoj cai tom qab ua tus txheej txheem yuam kev, qhov kev sib txawv ntawm binary binary yuav raug hu ua lub sij hawm ntawd.

- NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) npepaceURI tsim nyog npe: (NSString *) qName attributes: (NSDictionary *) attributeDict {
currentElement = [elementName copy];
ElementValue = [[NSMutableString alloc] init];
yog tias ([elementName isEqualToString: @ "item"]) {
khoom = [[NSMutableDictionary alloc] init];

}

}

Cov nqaij ntawm XML parser muaj peb kev khiav dej num, ib qho uas sau thaum pib ntawm tus neeg caij, ib qho uas sau thaum nruab nrab ntawm parsing lub caij, thiab ib qho uas sau kawg ntawm lub caij.

Rau qhov ua piv txwv, peb yuav parsing cov ntaub ntawv zoo xws li RSS cov ntaub ntawv uas zom zom mus ua ib pawg nyob rau hauv nqe lus ntawm "khoom" hauv XML ntaub ntawv. Thaum pib ntawm kev ua haujlwm, peb tabtom tshawb xyuas lub npe lub npe "khoom" thiab muab cov lus peb txhais thaum faib pawg tshiab. Txwv tsis pub, peb pib hloov peb cov kuj sib txawv rau cov nqi.

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) hlua {
[ElementValue appendString: hlua];
}

Qhov no yog qhov yooj yim. Thaum peb pom cov cim, peb tsuas ntxiv lawv rau peb cov peev xwm "ElementValue".

- (tsis muaj dab tsi) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) npepaceURI tsim npeName: (NSString *) qName {
yog tias ([elementName isEqualToString: @ "item"]) {
[khoom addObject: [khoom daim]];
} lwm tus {
[khoom setObject: ElementValue forKey: elementName];
}

}

Thaum peb tau ua tiav ib lub caij, peb yuav tsum ua ib yam ntawm ob yam: (1) yog tias lub caij kawg yog "yam khoom", peb tau ua tiav peb pawg, yog li peb mam li ntxiv peb phau ntawv txhais lus rau peb cov khoom ".

Los yog (2) yog lub caij tsis yog "khoom", peb mam li teev tus nqi nyob rau hauv peb phau ntawv txhais lus nrog qhov tseem ceeb uas zoo li lub caij npe. (Qhov no txhais tau hais tias peb tsis xav tau ib tug neeg txawv txawv rau txhua qhov chaw hauv XML cov ntaub ntawv. Peb tuaj yeem ua haujlwm rau lawv ntxiv me ntsis.)

- (khoob lug) parserDidEndDocument: (NSXMLParser *) parser {

yog tias (yuam kevHauv = tsis muaj)
{
NSLog (@ "XML ua tiav!");
} lwm tus {
NSLog (@ "Yuam kev tshwm sim thaum ua XML");
}

}

Qhov no yog txoj haujlwm kawg rau peb cov sijhawm ua haujlwm. Nws tsuas xaus cov ntaub ntawv. Koj mam li tso cov cai uas koj xav ua kom tiav qhov txheej txheem ntawm no lossis txhua yam tshwj xeeb uas koj xav tau ua thaum yuam kev.

Ib qho zoo tshaj plaws ntau lub apps yuav xav ua ntawm no yog kom txuag tau cov ntaub ntawv thiab / lossis XML tej ntaub ntawv rau cov ntaub ntawv ntawm lub ntaus ntawv. Ntawd txoj kev, yog hais tias tus neeg siv tsis txuas nrog Internet tom ntej no lawv thauj lub app, lawv tseem tuaj yeem tau txais cov ntaub ntawv no.

Tau kawg, peb yuav tsis hnov ​​qab qhov tseem ceeb tshaj plaws: qhia koj daim ntawv thov kom muab cov ntaub ntawv pov thawj (thiab muab qhov chaw nyob xa ntawv mus nrhiav nws ntawm!).

Yuav pib qhov txheej txheem, koj tsuas xav ntxiv cov kab hauv cov cai rau qhov chaw uas koj xav ua XML processing:

[nws tus kheej parseXMLFileAtURL: @ "http://www.webaddress.com/file.xml"];