2013-06-06 100 views
0

我需要將字典轉換爲XML格式,以便與目標C中的SOAP webservice一起使用。將NSDictionary轉換爲XML

Let the dictionary be { 
    password = testpassword; 
    username = testusername; 
} 
and the converted result i need is : 

<password>testpassword</password> 
<username>testusername</username> 

i need a specific function to get output like this format for dynamic dictioanry . 

many libraries are available but i dont get output like this . 

thanks in advance .. 
+1

你是否需要它作爲一個文件?一個字符串?你有架構嗎?兩個元素不會生成XML。 – uchuugaka

回答

3

請使用下面的代碼將NSDictionary轉換爲XML。

+(NSString*)ConvertDictionarytoXML:(NSDictionary*)dictionary withStartElement:(NSString*)startele 
{ 
    NSMutableString *xml = [[NSMutableString alloc] initWithString:@""]; 
    NSArray *arr = [dictionary allKeys]; 
    [xml appendString:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"]; 
    [xml appendString:[NSString stringWithFormat:@"<%@>",startele]]; 
    for(int i=0;i<[arr count];i++) 
    { 
     id nodeValue = [dictionary objectForKey:[arr objectAtIndex:i]]; 
     if([nodeValue isKindOfClass:[NSArray class]]) 
     { 
      if([nodeValue count]>0){ 
       for(int j=0;j<[nodeValue count];j++) 
       { 
        id value = [nodeValue objectAtIndex:j]; 
        if([ value isKindOfClass:[NSDictionary class]]) 
        {  
         [xml appendString:[NSString stringWithFormat:@"<%@>",[arr objectAtIndex:i]]]; 
         [xml appendString:[NSString stringWithFormat:@"%@",[value objectForKey:@"text"]]]; 
         [xml appendString:[NSString stringWithFormat:@"</%@>",[arr objectAtIndex:i]]]; 
        } 

       } 
      } 
     } 
     else if([nodeValue isKindOfClass:[NSDictionary class]]) 
     { 
      [xml appendString:[NSString stringWithFormat:@"<%@>",[arr objectAtIndex:i]]]; 
      if([[nodeValue objectForKey:@"Id"] isKindOfClass:[NSString class]]) 
       [xml appendString:[NSString stringWithFormat:@"%@",[nodeValue objectForKey:@"Id"]]]; 
      else 
       [xml appendString:[NSString stringWithFormat:@"%@",[[nodeValue objectForKey:@"Id"] objectForKey:@"text"]]]; 
      [xml appendString:[NSString stringWithFormat:@"</%@>",[arr objectAtIndex:i]]]; 
     } 

     else 
     { 
      if([nodeValue length]>0){ 
       [xml appendString:[NSString stringWithFormat:@"<%@>",[arr objectAtIndex:i]]]; 
       [xml appendString:[NSString stringWithFormat:@"%@",[dictionary objectForKey:[arr objectAtIndex:i]]]]; 
       [xml appendString:[NSString stringWithFormat:@"</%@>",[arr objectAtIndex:i]]]; 
      } 
     } 
    } 

    [xml appendString:[NSString stringWithFormat:@"</%@>",startele]]; 
    NSString *finalxml=[xml stringByReplacingOccurrencesOfString:@"&" withString:@"&amp;"]; 
// NSLog(@"%@",xml); 
    return finalxml; 
} 
+0

真棒。我糾正了一點,它很好。 (見下) – RemembranceNN

+1

嗯。處理嵌套字典肯定有問題。 –

+0

什麼是startele參數 –