簡體   English   中英

如何在iPhone的NSDictionary中解析xml響應

[英]how to parse xml response in NSDictionary in iPhone

我正在嘗試解析xml響應並想要NSDictionary中的數據。如何獲取字典中的數據而不是NSMutableArray。 請幫幫我,得到以下答復:

<NewDataSet> 
<Table> 
<ID>105</ID> 
<pk3>Apr 05, 2013</pk3> 
<YEAR>2013</YEAR> 
<TIME>09:10:46 PM</TIME>
</Table>
</NewDataSet>

提前致謝。

您可以嘗試一下。

  .h /////////////////

    @interface LoginWithTauky:UIViewController<NSXMLParserDelegate,NSURLConnectionDelegate>
    {
        NSXMLParser *xmlParser;
        NSMutableString *soapResults;
        BOOL xmlResults;

    }

    .m  //////////////

    -(void)Viewdidload
    {
        xmlParser = [[NSXMLParser alloc] initWithData:XMLdata];
        [xmlParser setDelegate: self];
        [xmlParser setShouldResolveExternalEntities: YES];
        [xmlParser parse];
    }
    -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName
       attributes: (NSDictionary *)attributeDict
    {
        NSLog(@"fsdfsd");
        if( [elementName isEqualToString:@"Table"]||[elementName isEqualToString:@"ID"]||[elementName isEqualToString:@"pk3"]||[elementName isEqualToString:@"YEAR"]||[elementName isEqualToString:@"TIME"])
        {
             if(!soapResults)
            {
                soapResults = [[NSMutableString alloc] init];
            }
            xmlResults = YES;
        }
    }
    -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    {
        if( xmlResults )
        {
            [soapResults appendString: string];
            NSLog(@"soap result %@",soapResults);

        }
    }

    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
    {
        if( [elementName isEqualToString:@"Table"])
        {
            xmlResults = FALSE;
            [user_idArray addObject:soapResults];
             soapResults = nil;
        }
    if( [elementName isEqualToString:@"ID"])
        {
            xmlResults = FALSE;
            [IDArray addObject:soapResults];
             soapResults = nil;
        }
    if( [elementName isEqualToString:@"pk3"])
        {
            xmlResults = FALSE;
            [IDArray addObject:soapResults];
             soapResults = nil;
        }
    if( [elementName isEqualToString:@"YEAR"])
        {
            xmlResults = FALSE;
            [IDArray addObject:soapResults];
             soapResults = nil;
        }
    if( [elementName isEqualToString:@"TIME"])
        {
            xmlResults = FALSE;
            [IDArray addObject:soapResults];
             soapResults = nil;
        }
    }

這個工作正常,我已經測試過了。 看看這個

-(IBAction)parseTheXml:(id)sender
{
NSString * mystr =[[NSString alloc]initWithFormat:@"<NewDataSet>"
                   "<Table>"
                   "<ID>105</ID>"
                   "<pk3>Apr 05, 2013</pk3>"
                   "<YEAR>2013</YEAR>" 
                   "<TIME>09:10:46 PM</TIME>"
                   "</Table>"
                   "</NewDataSet>" ];


NSData * mydata =[mystr dataUsingEncoding:NSUTF8StringEncoding];
if(!parser)
parser =[[NSXMLParser alloc]initWithData:mydata];
[parser setDelegate:self];

[parser setShouldResolveExternalEntities:YES];
  BOOL success= [parser parse];
if(success)
{
    NSLog(@"SUCCESS");
}

}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    NSLog(@"the tag is %@",elementName);
 if(!([elementName isEqualToString:@"Table"] ||[elementName isEqualToString:@"NewDataSet"]))
  {

    if(!dataDict)
        dataDict =[[NSMutableDictionary alloc]init];

               datastring =[[NSMutableString alloc]init];
  }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
   datastring = [NSMutableString stringWithFormat:@"%@",string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
 if(!([elementName isEqualToString:@"Table"] ||[elementName isEqualToString:@"NewDataSet"]))
{
    if([elementName isEqualToString:@"VideoThumbnail"])
        NSLog(@"the string is : %@",datastring);
    [dataDict setObject:datastring forKey:elementName];
}  

}

它會給你這樣的字典:

2013-12-05 16:24:05.959 parsingXML[3305:c07] the string we get is {
ID = 105;
TIME = "09:10:46 PM";
YEAR = 2013;
pk3 = "Apr 05, 2013";

}

暫無
暫無

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

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