简体   繁体   English

如何在iPhone的NSDictionary中解析xml响应

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

I am trying to parse xml response and want data in NSDictionary.how can I get data in dictionary instead of NSMutableArray. 我正在尝试解析xml响应并想要NSDictionary中的数据。如何获取字典中的数据而不是NSMutableArray。 Please help me ,getting response like : 请帮帮我,得到以下答复:

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

Thanks in advance. 提前致谢。

You can try with this.. 您可以尝试一下。

  .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;
        }
    }

This works fine , i have tested it. 这个工作正常,我已经测试过了。 Check it out 看看这个

-(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];
}  

} }

it will give you dictionary like this : 它会给你这样的字典:

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