Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
755,57 KB
Nội dung
PHÂN TÍCH XML PARSER XML (viết tắt từ eXtensible Markup Language, “Ngôn ngữ Đánh dấu Mở rộng”) ngôn ngữ đánh dấu với mục đích chung W3C đề nghị, để tạo ngôn ngữ đánh dấu khác Đây tập đơn giản SGML, có khả mô tả nhiều loại liệu khác Mục đích XML đơn giản hóa việc chia sẻ liệu hệ thống khác nhau, đặc biệt hệ thống kết nối với Internet Các ngôn ngữ dựa XML định nghĩa theo cách thông thường, cho phép chương trình sửa đổi kiểm tra hợp lệ ngôn ngữ mà không cần có hiểu biết trước hình thức chúng Bài giúp bạn phân tích cú pháp XML, cách đọc thẻ XML Mục tiêu: 1, Truy cập vào trang chủ app đọc rss :Rss tập tin XML.Thế RSS ? http://www.apple.com/rss/ RSS định dạng tập tin thuộc họ XML (ngôn ngữ đánh dấu mở rộng, chuẩn dùng để mô tả liệu) dùng việc chia sẻ tin tức Web (Web syndication) dùng nhiều website tin tức nhật ký trực tuyến Chữ viết tắt (theo tiếng Anh) RSS dùng để chuẩn sau: Rich Site Summary (RSS 0.91) RDF Site Summary (RSS 0.9 and 1.0) Really Simple Syndication (RSS 2.0.0) Với công nghệ RSS, người dùng không cần phải vào trang web biết trang web có tin tức Các tin tức nhất, cập nhật tự động đưa tới người đọc họ đăng ký để nhận RSS 2, Đọc thẻ XML Hiển thị tiêu đề, thời gian cập nhật,Và ảnh ! Ở đơn giản làm việc với RSS top 10 songs! http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml Mở FireFox nhìn thấy này! Source code XML trông này! Ok !!! Chúng ta bắt đầu nào!!! khởi tạo proJect mới! Ở đơn giản muốn giới thiệu cách hiển thị Một hát! với tiêu đề, thời gian xuất bản, Và ảnh nó.! Như thiết kế giao diện Đơn giản sau: label Tiêu đề Top 10 songs Itune! trang trí cho đẹp! Label Tên hát hiển thị tiêu đề hát Label ngày tháng hiển thị thời gian ImageView để hiển thị ảnh! Tạo class để quản lý View vừa tạo kết nối class với view! Tạo property để tương tác label imageView! Và biến kiếm tra xem ta đọc tag nào, Và lớp thay đổi lưu lại đường link ảnh ,các chuỗi title ,chuỗi date Để Phân tích XML ta đăng ký delegate! NSXMLParserDelegate Nó trông này! @interface TopSongsViewController : UIViewController{ 10 BOOL kiemTra_Title; BOOL kiemTra_Date; BOOL kiemTra_Image; NSMutableArray *title; NSMutableArray *date; NSMutableArray *image; } @property (weak, nonatomic) IBOutlet UIImageView *imageView; @property (weak, nonatomic) IBOutlet UILabel *titleSongs; 11 @property (weak, nonatomic) IBOutlet UILabel *date; Mã nguồn ! Trong ViewDidload ta khia báo nhớ cho Các mảng : title=[[NSMutableArray alloc]init]; date=[[NSMutableArray alloc]init]; image=[[NSMutableArray alloc]init]; url đăng ký link RSS “http://www.apple.com/rss/” top 10 songs Itune ! dòng lệch đăng ký phân tích đăng ký delegate dòng cuối thực phân tích thẻ XML! NSURL *url=[NSURL URLWithString:@"http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml"]; NSXMLParser *phanTichXML=[[NSXMLParser alloc]i //lay gia tri cua the luu trongs tring -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ } nitWithContentsOfURL:url]; phanTichXML.delegate=self; [phanTichXML parse]; Nếu bạn tìm hiểu web rõ ràng!Một thẻ :Mở thẻ Nội dung thẻ đóng thẻ! Như Delegate cung cấp cho đủ phương pháp để truy vấn! Chuẩn bị cho việc đọc thẻ !dĩ nhiên để đọc thẻ, Lưu tên thẻ elemntName ! tham số thẻ lưu attributes -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ } Đọc nội dung thẻ, nội dung lưu biến String //lay gia tri cua the luu tring -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ } Khi đóng thẻ.Kết thúc truy vấn thẻ đó! -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ } Ở làm đơn giản kiểm tra gặp thẻ cần truy vấn return YES! kiểm tra xem có phải thẻ title không! kiểm tra xem có phải thẻ “im:releaseDate” không! kiểm tra xem có phải thẻ “im:image”, độ cao 170pixel không! -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 10 11 12 13 14 if ([elementName isEqualToString:@"title"]) { kiemTra_Title=YES; return; } if ([elementName isEqualToString:@"im:releaseDate"]) { kiemTra_Date=YES; return; } if ([elementName isEqualToString:@"im:image"]&&[attributeDict[@"height"] isEqualToString:@"170"]) { kiemTra_Image=YES; return; } 15 } gặp thẻ tiếp tục chạy! Với thẻ, Ta lấy title đưa vào mảng lưu lại! Lấy thời gian lưu vào mảng date! Lấy link ảnh lưu vào mảng image! -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 10 if (kiemTra_Title) { [title addObject:string]; } if (kiemTra_Date) { [date addObject:string]; } if (kiemTra_Image) { [image addObject:string]; } 11 } lấy nội dung thẻ lưu vào mảng tương ứng! Tuy nhiên phải kết thúc Thẻ để đến với thẻ tiếp theo! -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 10 if (kiemTra_Title) { kiemTra_Title=NO; } if (kiemTra_Date) { kiemTra_Date=NO; } if (kiemTra_Image) { kiemTra_Image=NO; } 11 } ok! Chúng ta quay lại viewDidload dể tải lên tiêu đề thời gian image set vào giao diện: Ở lấy hát! settex cho tiêu đề thời gian tương ứng vơi label Để load ảnh mạng !UIImage hỗ trợ load data – mà data hỗ trợ load url ! khởi tạo URL - (void)viewDidLoad { [super viewDidLoad]; title=[[NSMutableArray alloc]init]; date=[[NSMutableArray alloc]init]; image=[[NSMutableArray alloc]init]; NSURL *url=[NSURL URLWithString:@"http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/xml"]; NSXMLParser *phanTichXML=[[NSXMLParser alloc]initWithContentsOfURL:url]; phanTichXML.delegate=self; 10 11 12 13 14 15 16 17 [phanTichXML parse]; [self.titleSongs setText:title[0]]; [self.date setText:date[0]]; NSString *strUrl=image[0]; NSURL *linkImage=[NSURL URLWithString:strUrl]; NSData *data=[NSData dataWithContentsOfURL:linkImage]; UIImage *image=[UIImage imageWithData:data]; self.imageView.image=image; 18 } ok thử biên dịch kết quả! [...]... -(void )parser: (NSXMLParser * )parser foundCharacters:(NSString *)string{ 2 3 4 5 6 7 8 9 10 if (kiemTra_Title) { [title addObject:string]; } if (kiemTra_Date) { [date addObject:string]; } if (kiemTra_Image) { [image addObject:string]; } 11 } như vậy chúng ta đã lấy được nội dung thẻ lưu vào mảng tương ứng! Tuy nhiên chúng ta phải kết thúc Thẻ để đến với thẻ tiếp theo! 1 -(void )parser: (NSXMLParser * )parser. .. alloc]init]; NSURL *url=[NSURL URLWithString:@"http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10 /xml" ]; 8 NSXMLParser *phanTichXML=[[NSXMLParser alloc]initWithContentsOfURL:url]; 9 phanTichXML.delegate=self; 10 11 12 13 14 15 16 17 [phanTichXML parse]; [self.titleSongs setText:title[0]]; [self.date setText:date[0]]; NSString *strUrl=image[0]; NSURL *linkImage=[NSURL URLWithString:strUrl];