IOS解析XML檔案

來源:互聯網
上載者:User

這裡使用NSXMLParser來解析,這個是apple內建的xml解析庫,有個參考文章:http://www.raywenderlich.com/553/xml-tutorial-for-ios-how-to-choose-the-best-xml-parser-for-your-iphone-project

在Xcode中加入一個xml檔案:

<?xml version="1.0" encoding="ISO-8859-1"?><root><Shop shoplocation="beijing">    <id>001</id>    <name>John</name>    <url>Reminder</url>    <info>Don't forget the meeting!</info></Shop><Shop shoplocation="dongcheng">    <id>002</id>    <name>Jack</name>    <url>cc</url>    <info>how are you!</info></Shop><Shop shoplocation="haidian">    <id>003</id>    <name>Tom</name>    <url>bb</url>    <info>I am fine!</info></Shop></root>



先讀出來

   NSString* path =  [[NSBundle mainBundle] pathForResource:@"shop" ofType:@"xml"];    NSData *data = [[NSData alloc] initWithContentsOfFile:path options:(NSDataReadingMappedIfSafe) error:nil];    NSXMLParser *parser=[[NSXMLParser alloc] initWithData:tmpdata];<span style="white-space:pre"></span>[parser setDelegate:self];[parser parse];[parser release];    [self parseShopListFromResponse:data];


然後進行解析:

@property(nonatomic,retain)ShopData* tmpShop;@property(nonatomic,retain)NSMutableString* currentString;@property(nonatomic,retain)NSString* currentTag;#pragma mark NSXMLParser delegate methods- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName  namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qNameattributes: (NSDictionary *)attributeDict {    self.currentTag = elementName;if ([elementName isEqualToString:@"root"]) {self.tmpList = [[NSMutableArray alloc] init];}else if ([elementName isEqualToString:@"Shop"]) {self.tmpShop = [[ShopData alloc] init];        <span style="white-space:pre"></span><span style="font-family: Arial, Helvetica, sans-serif;"> </span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">NSArray</span><span style="font-family: Arial, Helvetica, sans-serif;">* array = [attributeDict </span><span class="s2" style="font-family: Arial, Helvetica, sans-serif;">allKeys</span><span style="font-family: Arial, Helvetica, sans-serif;">];</span><p class="p1">        <span style="white-space:pre"></span><span class="s1">NSString</span>* key = [array <span class="s2">lastObject</span>];</p><p class="p1">        <span style="white-space:pre"></span><span class="s1">NSString</span>*s  = [attributeDict <span class="s2">objectForKey</span>:key];</p><p class="p1">        <span style="white-space:pre"></span><span class="s3">self</span>.<span class="s4">tmpShop</span>.<span class="s4">info</span> = s;//取到ShopLocation這個屬性</p>}}-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {    if (self.currentString == nil) {        self.currentString = [[NSMutableString alloc] initWithString:@""];    }        if ([self.currentTag isEqualToString:@"name"] ||        [self.currentTag isEqualToString:@"id"] ||        [self.currentTag isEqualToString:@"url"] ||        [self.currentTag isEqualToString:@"info"]) {        [self.currentString appendString:string];}}-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([elementName isEqualToString:@"Shop"]) {[self.tmpList addObject:self.tmpShop];        [self.tmpShop release];} if ([elementName isEqualToString:@"name"]) {        self.tmpShop.name = [self.currentString copy];        [self.currentString setString:@""];}else if ([elementName isEqualToString:@"id"]) {self.tmpShop._id = [self.currentString copy];        [self.currentString setString:@""];}else if ([elementName isEqualToString:@"url"]) {self.tmpShop.url = [self.currentString copy];        [self.currentString setString:@""];}else if ([elementName isEqualToString:@"info"]) {self.tmpShop.info = [self.currentString copy];        [self.currentString setString:@""];}}- (void)parserDidStartDocument:(NSXMLParser *)parser {NSLog(@"開始解析xml檔案");}- (void)parserDidEndDocument:(NSXMLParser *)parser {[self.tableView reloadData];NSLog(@"解析xml檔案完成");}


Shopdata的結構是:

@property (nonatomic,retain) NSString *name;@property (nonatomic,retain) NSString *url;@property (nonatomic,retain) NSString *_id;@property (nonatomic,retain) NSString *info;@property (nonatomic, retain) UIImage *appIcon;



代碼可以在http://download.csdn.net/detail/baidu_nod/7585037下載,無需積分

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.