簡體   English   中英

如何在類中添加NSXML解析器?

[英]How to add NSXML parser in class?

我想將NSXML解析器添加到我的Objective-C類中並解析XML文件

在.h文件中

NSMutableData *myWebData; NSXMLParser *myXMLParser; NSString *tempStr;

在.m生活中

    (void)ViewDidLoad
    {
    NSString *soapMsg=@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
        "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
        "<soap:Body>\n"
        "<GetCountryList xmlns=\"http://tempuri.org/\" />"
        "</soap:Body>"
        "</soap:Envelope>";

        NSURL *myurl=[NSURL URLWithString:@"http://iphone.dotnetdemosite.com/Health4Life/Health4Life_Service.asmx?op=GetCountryList"];
        NSMutableURLRequest *connectionReq=[NSMutableURLRequest requestWithURL:myurl];

        [connectionReq addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
        [connectionReq addValue:@"http://tempuri.org/GetCountryList" forHTTPHeaderField:@"SOAPAction"];
        [connectionReq setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];
        [connectionReq addValue:[NSString stringWithFormat:@"%i",[soapMsg length]] forHTTPHeaderField:@"Content-Length"];
        [connectionReq setHTTPMethod:@"POST"];



        NSURLConnection *myConnection=[[NSURLConnection alloc] initWithRequest:connectionReq delegate:self];
        if (myConnection) {
            myWebData=[[NSMutableData alloc]initWithLength:0];
        }
    }

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"connection error");
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [myWebData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{ 
    [myWebData appendData:data];

}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *str=[[NSString alloc] initWithBytes:[myWebData bytes] length:[myWebData length] encoding:NSStringEncodingConversionAllowLossy];
    NSLog(@"%@",str);
    [str release];

    if(myXMLParser!=nil && [myXMLParser retainCount]>0)
    { 
        myXMLParser.delegate=nil; 
        [myXMLParser release]; 
        myXMLParser=nil; 
    }

    myXMLParser=[[NSXMLParser alloc] initWithData:myWebData];
    myXMLParser.delegate=self;
    [myXMLParser parse];

    [connection release];
    [myWebData release];
}

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
///////////////       logic here
}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if(tempStr!=nil && [tempStr retainCount]>0)
    {  
        [tempStr release]; tempStr=nil;
    }
    tempStr=[[NSString alloc] initWithString:string];
}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
///////////////logic here
}

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    //NSLog(@"%@",[countryArray description]);
//  NSLog(@"%@",[stateArray description]);
//  NSLog(@"%@",[cityArray description]);
    //NSLog(@"%@",[tempstate description]);
    /////////////////////          print array if you want in this you will get all data in array ,
    //[(UITableView *)self.view reloadData];
}

嗨,朋友,我認為您需要了解nsxmlparser委托,共有三種委托方法

  1. didstartelement
  2. didendelement
  3. foundcharacter

如果您不回答,請向所有人提出一個建議,請不要對他/她嘗試過的任何人投反對票,如果他們錯了,可以添加評論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM