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

how to parse xml response in NSDictionary in iPhone

提问人:user3007459 提问时间:12/5/2013 更新时间:12/5/2013 访问量:1993

问:

我正在尝试解析xml响应并希望在NSDictionary中获取数据,我怎样才能在字典中获取数据而不是NSMutableArray。请帮助我,得到这样的回应:

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

提前致谢。

iOS iPhone Objective-C XML 解析 NS字典

评论

0赞 Anoop Vaidya 12/5/2013
您有 NSXmlParser,使用它并从中构造字典。
0赞 Dharmbir Singh 12/5/2013
请看这个答案。它是由我实现的,我相信它会对您有所帮助。stackoverflow.com/questions/15172669/......

答:

1赞 Aslam 12/5/2013 #1

你可以试试这个..

  .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;
        }
    }
0赞 Rana 12/5/2013 #2

这工作正常,我已经测试过了。一探究竟

-(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";

}