【问题标题】:how to parse xml response in NSDictionary in iPhone如何在 iPhone 的 NSDictionary 中解析 xml 响应
【发布时间】:2013-12-22 05:02:47
【问题描述】:

我正在尝试解析 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-parsing nsdictionary


【解决方案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;
        }
    }

【讨论】:

    【解决方案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";
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 2014-04-17
      • 2015-11-06
      相关资源
      最近更新 更多