XML Parsing in Cocoa Touch/iPhone

后端 未结 3 1930
南方客
南方客 2020-12-09 13:49

Okay i have seen TouchXML, parseXML, NSXMLDocument, NSXMLParser but i am really confused with what to to do.

I have an iphone app which connects to a servers, reques

3条回答
  •  庸人自扰
    2020-12-09 14:40

    providing you one simple example of parsing XML in Table, Hope it would help you.

    //XMLViewController.h

    #import 
    @interface TestXMLViewController : UIViewController{
    @private
    NSXMLParser *xmlParser;
    NSInteger depth;
    NSMutableString *currentName;
    NSString *currentElement;
    NSMutableArray *data;
    }
    @property (nonatomic, strong) IBOutlet UITableView *tableView;
    -(void)start;
    @end
    

    //TestXMLViewController.m

    #import "TestXmlDetail.h"
    #import "TestXMLViewController.h"
    @interface TestXMLViewController ()
    - (void)showCurrentDepth;
    
    @end
    
    @implementation TestXMLViewController
    
    @synthesize tableView;
    - (void)start
    {
    NSString *xml = @"Mainfirst rowsecond rowthird row";
    xmlParser = [[NSXMLParser alloc] initWithData:[xml dataUsingEncoding:NSUTF8StringEncoding]];
    [xmlParser setDelegate:self];
    [xmlParser setShouldProcessNamespaces:NO];
    [xmlParser setShouldReportNamespacePrefixes:NO];
    [xmlParser setShouldResolveExternalEntities:NO];
    [xmlParser parse];
    
    }
    
    
    - (void)parserDidStartDocument:(NSXMLParser *)parser 
    {
    NSLog(@"Document started");
    depth = 0;
    currentElement = nil;
    }
    
    - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError 
    {
    NSLog(@"Error: %@", [parseError localizedDescription]);
    }
    
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName 
    attributes:(NSDictionary *)attributeDict
    {
    
    currentElement = [elementName copy];
    
    if ([currentElement isEqualToString:@"Node"])
    {
        ++depth;
        [self showCurrentDepth];
    }
    else if ([currentElement isEqualToString:@"name"])
    {
    
        currentName = [[NSMutableString alloc] init];
    }
    }
    
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qName
    {
    
    if ([elementName isEqualToString:@"Node"]) 
    {
        --depth;
        [self showCurrentDepth];
    }
    else if ([elementName isEqualToString:@"name"])
    {
        if (depth == 1)
        {
            NSLog(@"Outer name tag: %@", currentName);
        }
        else 
        {
            NSLog(@"Inner name tag: %@", currentName);
          [data addObject:currentName];
        }
        }
       }        
    
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
    if ([currentElement isEqualToString:@"name"]) 
    {
        [currentName appendString:string];
    } 
    }
    
    - (void)parserDidEndDocument:(NSXMLParser *)parser 
    {
        NSLog(@"Document finished", nil);
    }
    
    
    
    - (void)showCurrentDepth
    {
      NSLog(@"Current depth: %d", depth);
    }
    
    
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
     data = [[NSMutableArray alloc]init ];
    [self start];
    self.title=@"XML parsing";
    NSLog(@"string is %@",data);
    }
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    `enter code here`return [data count];
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *simpleTableIdentifier = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
    cell.textLabel.text = [data objectAtIndex:indexPath.row];
    return cell;
    }
    @end
    

提交回复
热议问题