您的位置:首页 > 移动开发 > IOS开发

ios 解析xml 并且运用了字典和可变数组存放数据

2013-03-06 21:55 513 查看




ios 解析xml 并且运用了字典和可变数组存放数据

@interface WithoutBookingView : UIViewController <UITextFieldDelegate,NSXMLParserDelegate,

UITableViewDelegate,UITableViewDataSource>{

    @private

    

    //*----------------选择时间------------------------*//

    UIDatePicker* datePicker_;

    //*----------------------------------------------*//

    

    

    //*---------------创建数组存数据、tableView显示选择的列表----------------*//

    @public

    //数组

    //校区

    NSArray* schoolDistrictList_;

    //教室类型

    NSMutableArray* classTypeMutableArray_;

    //教室

    NSMutableArray* lessonClassroomMutableArray_;

    //保存教室数组的数组

    NSMutableArray* allTheClassroomMutableArrar_;

    

    //显示的时候用会array的数组

    NSArray* classTypeList_;

    NSArray* lessonClassroomList_;

    

    //存xml里所有数据的字典

    NSDictionary* allTheClassroomDictionary_;

    //节次

    NSArray* lessonSectionList_;

    

    //创建tableview

    //校区

    UITableView* schoolDistrictTableView_;

    //教室类别

    UITableView* classTypeTableView_;

    //教室

    UITableView* lessonClassroomTableView_;

    //节次

    UITableView* lessonSectionTableView_;

    

    //*---------------------------------------------------------------*//

    

    

    //*********************************解析xml************************************** 

    NSData* xmlData_;

    NSXMLParser* parserXML_;

    NSData* dataToParse_;

    NSMutableArray* workingArray_;

    NSMutableString* workingPropertyString_;

    NSArray* elementsToParse_;

    BOOL storingCharacterData_;

    

    //*********************************解析xml************************************** 

    

}

@end

- (void)viewDidLoad

{

    [super viewDidLoad];

      //*===============================初始化数组、列表等==========================================*//

    

    //校区与节次

    schoolDistrictList_ = [ [ NSArray alloc ] initWithObjects: @"大学城",@"龙洞",@"东风路",@"商学院" , nil ];

    lessonSectionList_ = [ [ NSArray alloc ] initWithObjects: @"1,2",@"3,4",@"5",@"6,7",@"8,9",@"10,11,12", nil ];

    //节次默认第1,2节

    lessonSectionTextField_.text = [ lessonSectionList_ objectAtIndex: 0 ];

    //初始化教室类型、教室、字典

    classTypeMutableArray_ = [ [ NSMutableArray alloc ] init ];

    lessonClassroomMutableArray_ = [ [ NSMutableArray alloc ] init ];

    

    

    //*=======================================================================================*//

    

    //*---------------------------------初始化tableview-------------------------------------*//

    //统一tableview的大小

    CGRect tableViewFrame = CGRectMake( 120 , 120 , 165 , 140 );

    

    //校区

        schoolDistrictTableView_ = [ [ UITableView alloc ] initWithFrame: tableViewFrame style: UITableViewStyleGrouped ];

        schoolDistrictTableView_.delegate = self;

        schoolDistrictTableView_.dataSource = self; 

    //节次

        lessonSectionTableView_ = [ [ UITableView alloc ] initWithFrame: CGRectMake( 150  , 220 , lessonSectionTextField_.frame.size.width , 140 ) style: UITableViewStyleGrouped ];

        lessonSectionTableView_.delegate = self;

        lessonSectionTableView_.dataSource = self;

    

    tableViewFrame.origin.y += dudaoTextFieldDistance;

    

    //教室类型

        classTypeTableView_ = [ [ UITableView alloc ] initWithFrame: tableViewFrame style: UITableViewStyleGrouped ];

        classTypeTableView_.delegate = self;

        classTypeTableView_.dataSource = self;

    

    tableViewFrame.origin.y += dudaoTextFieldDistance;

    

    //教室

        lessonClassroomTableView_ = [ [ UITableView alloc ] initWithFrame: tableViewFrame style: UITableViewStyleGrouped ];

        lessonClassroomTableView_.delegate = self;

        lessonClassroomTableView_.dataSource = self;

    

    //*----------------------------------------------------------------------------------------*//

    

}

以下只是解析xml的方法,另外需要其他函数来启动以下解析xml的方法

#pragma mark *********************************解析xml*************************************

//遍历xml的节点

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

{

    //判断elementName与string-array是否相等

    if ( [ elementName isEqualToString: @"string-array" ] )

    {

        [ classTypeMutableArray_ addObject: [ attributeDict objectForKey: @"name" ] ];

    }

    //查询指定对象是否存在

    storingCharacterData_ = [ elementsToParse_ containsObject: elementName ];

}

//节点有值则调用此方法

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

    if ( storingCharacterData_ )

    {

        [ workingPropertyString_ appendString: string ];  

//把一个字符串接在另一个字符串的末尾

    }

}

//当遇到结束标记时,进入此句

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

{

    if ( storingCharacterData_ )

    {

        //NSString的方法,去掉字符串前后的空格

        NSString* trimmedString = [ workingPropertyString_ stringByTrimmingCharactersInSet: [ NSCharacterSet whitespaceAndNewlineCharacterSet ] ];

        //将字符串置空

        [ workingPropertyString_ setString:@"" ];;

        if ( [ elementName isEqualToString: @"item" ] )

        {

            [ lessonClassroomMutableArray_ addObject: trimmedString ];

//            NSLog( @"%@", trimmedString );

        }

    }

    //遇到string-array时

    if ( [ elementName isEqualToString: @"string-array" ] )

    {

        if ( [ lessonClassroomMutableArray_ count ]) 

        {

            [ allTheClassroomMutableArrar_ addObject: [ NSArray arrayWithObject: lessonClassroomMutableArray_ ] ];

            //先释放内存

            [ lessonClassroomMutableArray_ release ];

            lessonClassroomMutableArray_ = [ [ NSMutableArray alloc ] init ];

            

        }

    }

}

           //**********************************************************************//      

这里就是先选择了对应的xml文件名,接着就开始调用解析xml的方法。

#pragma mark -

#pragma mark Table Delegate Methods

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

{

[tableView deselectRowAtIndexPath:indexPath animated:YES];

int row = [ indexPath row ];

if ( tableView == schoolDistrictTableView_ ) 

{

        NSString *schoolDistrictName = [ schoolDistrictList_ objectAtIndex: row ];

        [ schoolDistrictTableView_ removeFromSuperview ];

        schoolDistrictTextField_.text = schoolDistrictName;

        

       schoolNumber_ =  schoolDistrictTextField_.text ;

        schoolNumber_ =  [ self  getDistrictNum ];

//        NSLog( @"%@", schoolNumber_ );

 //*********************************解析xml************************************** 

        

            //尝试xml

            //初始化用来临时存储从xml中读取的字符串

            workingPropertyString_ = [ NSMutableString string ];

                

            //初始化用来存储解析后的xml文件

            workingArray_ = [ NSMutableArray array ];

            

            //从资源文件中获取xml文件

            NSString *strPathXml = [[NSBundle mainBundle] pathForResource: schoolDistrictName ofType:@"xml"];

            

            //将xml文件转换成data类型

            xmlData_ = [ [ NSData alloc ] initWithContentsOfFile: strPathXml ];

            

            //初始化待解析的xml

            parserXML_ = [ [ NSXMLParser alloc ] initWithData: xmlData_ ];

        

            //初始化需要从xml中解析的元素

            elementsToParse_ = [ NSArray arrayWithObjects:@"string-array",@"item", nil ];

              

            //设置xml解析代理为self

            [ parserXML_ setDelegate: self ];

            

            //开始解析之前清空数组

            [ classTypeMutableArray_ removeAllObjects ];

            

            //初始化存放所有课室二维数组

            allTheClassroomMutableArrar_ = [ [ NSMutableArray alloc ] init ];

            //开始解析

//这里就跳到上面所用到解析xml的三个方法

            [ parserXML_ parse ];//调用解析的代理方法

            

            //以字典形式存放对应的所有课室

            allTheClassroomDictionary_ = [ [ NSDictionary alloc ] initWithObjects: allTheClassroomMutableArrar_ forKeys: classTypeMutableArray_ ];

        

            //更新tableview

            [ classTypeTableView_ reloadData ];

//        NSLog( @"%@",allTheClassroomDictionary_ );

}

else if( tableView == classTypeTableView_ )

{

NSString *classTypeName = [ classTypeMutableArray_ objectAtIndex: row ];

        

[ classTypeTableView_ removeFromSuperview ];

       

classTypeTextField_.text = classTypeName;

//        NSLog( @"%@",[ allTheClassroomDictionary_ objectForKey: classTypeName ] );

        [ lessonClassroomMutableArray_ removeAllObjects ];

        [ lessonClassroomMutableArray_ addObject: [ allTheClassroomDictionary_ objectForKey: classTypeName]]; //从字典中获取对应的数组

//        NSLog( @"%@",lessonClassroomMutableArray_ );

//        NSLog( @"%@", [ [ lessonClassroomMutableArray_ objectAtIndex: 0 ] objectAtIndex: 0 ]);

        [ lessonClassroomTableView_ reloadData ];

    

}

    else if( tableView == lessonClassroomTableView_ )

    {

        NSString *lessonclassroomName = [ [ [ lessonClassroomMutableArray_ objectAtIndex: 0 ] objectAtIndex: 0 ] objectAtIndex: row ];

        [ lessonClassroomTableView_ removeFromSuperview ];

        lessonClassroomTextField_.text = lessonclassroomName;

    }

    else

    {

        NSString *lessonSectionlist = [ lessonSectionList_ objectAtIndex: row ];

        [ lessonSectionTableView_ removeFromSuperview];

        lessonSectionTextField_.text = lessonSectionlist;

    }

    

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: