• XML数据转JSON数据


    1:JSON转XML---通常把JSON数据写到Plist文件即可;

    2:XML数据转JSON--

      使用开源类 XMLReader 先XML数据先转换为 NSDictionary 即可

    3: 开源类XMLReader 

     1 //
     2 //  XMLReader.h
     3 //
     4 //
     5 /*
     6     本类使用方法:
     7         1:在使用的页面里面 导入本类 #import "XMLReader.h"
     8         2: 调用XMLReader 的两个类方法 就可以了,就可以返回字典数据;
     9         3:得到 NSDictionary数据,就是JSON 数据了;
    10  
    11  */
    12 #import <Foundation/Foundation.h>
    13 
    14 
    15 @interface XMLReader : NSObject <NSXMLParserDelegate>
    16 {
    17     NSMutableArray *dictionaryStack;
    18     NSMutableString *textInProgress;
    19     NSError **errorPointer;
    20 }
    21 
    22 //XML Data数据转换为 字典的方法;
    23 + (NSDictionary *)dictionaryForXMLData:(NSData *)data error:(NSError **)errorPointer;
    24 + (NSDictionary *)dictionaryForXMLString:(NSString *)string error:(NSError **)errorPointer;
    25 
    26 @end
    View Code
      1 //
      2 //  XMLReader.m
      3 //
      4 
      5 #import "XMLReader.h"
      6 
      7 NSString *const kXMLReaderTextNodeKey = @"text";
      8 
      9 @interface XMLReader (Internal)
     10 
     11 - (id)initWithError:(NSError **)error;
     12 - (NSDictionary *)objectWithData:(NSData *)data;
     13 
     14 @end
     15 
     16 
     17 @implementation XMLReader
     18 
     19 #pragma mark -
     20 #pragma mark -公有的方法
     21 
     22 //调用以下两个类方法即可;
     23 
     24 + (NSDictionary *)dictionaryForXMLData:(NSData *)data error:(NSError **)error
     25 {
     26     XMLReader *reader = [[XMLReader alloc] initWithError:error];
     27     NSDictionary *rootDictionary = [reader objectWithData:data];
     28     [reader release];
     29     return rootDictionary;
     30 }
     31 
     32 + (NSDictionary *)dictionaryForXMLString:(NSString *)string error:(NSError **)error
     33 {
     34     NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
     35     return [XMLReader dictionaryForXMLData:data error:error];
     36 }
     37 
     38 #pragma mark -
     39 #pragma mark 以下为 私有处理方法,可以不关注;
     40 
     41 - (id)initWithError:(NSError **)error
     42 {
     43     if (self = [super init])
     44     {
     45         errorPointer = error;
     46     }
     47     return self;
     48 }
     49 
     50 - (void)dealloc
     51 {
     52     [dictionaryStack release];
     53     [textInProgress release];
     54     [super dealloc];
     55 }
     56 
     57 - (NSDictionary *)objectWithData:(NSData *)data
     58 {
     59     // Clear out any old data
     60     [dictionaryStack release];
     61     [textInProgress release];
     62     
     63     dictionaryStack = [[NSMutableArray alloc] init];
     64     textInProgress = [[NSMutableString alloc] init];
     65     
     66     // Initialize the stack with a fresh dictionary
     67     [dictionaryStack addObject:[NSMutableDictionary dictionary]];
     68     
     69     // Parse the XML
     70     NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
     71     parser.delegate = self;
     72     BOOL success = [parser parse];
     73     
     74     // Return the stack's root dictionary on success
     75     if (success)
     76     {
     77         NSDictionary *resultDict = [dictionaryStack objectAtIndex:0];
     78         return resultDict;
     79     }
     80     
     81     return nil;
     82 }
     83 
     84 #pragma mark -
     85 #pragma mark NSXMLParserDelegate methods
     86 
     87 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
     88 {
     89     // Get the dictionary for the current level in the stack
     90     NSMutableDictionary *parentDict = [dictionaryStack lastObject];
     91 
     92     // Create the child dictionary for the new element, and initilaize it with the attributes
     93     NSMutableDictionary *childDict = [NSMutableDictionary dictionary];
     94     [childDict addEntriesFromDictionary:attributeDict];
     95     
     96     // If there's already an item for this key, it means we need to create an array
     97     id existingValue = [parentDict objectForKey:elementName];
     98     if (existingValue)
     99     {
    100         NSMutableArray *array = nil;
    101         if ([existingValue isKindOfClass:[NSMutableArray class]])
    102         {
    103             // The array exists, so use it
    104             array = (NSMutableArray *) existingValue;
    105         }
    106         else
    107         {
    108             // Create an array if it doesn't exist
    109             array = [NSMutableArray array];
    110             [array addObject:existingValue];
    111 
    112             // Replace the child dictionary with an array of children dictionaries
    113             [parentDict setObject:array forKey:elementName];
    114         }
    115         
    116         // Add the new child dictionary to the array
    117         [array addObject:childDict];
    118     }
    119     else
    120     {
    121         // No existing value, so update the dictionary
    122         [parentDict setObject:childDict forKey:elementName];
    123     }
    124     
    125     // Update the stack
    126     [dictionaryStack addObject:childDict];
    127 }
    128 
    129 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
    130 {
    131     // Update the parent dict with text info
    132     NSMutableDictionary *dictInProgress = [dictionaryStack lastObject];
    133     
    134     // Set the text property
    135     if ([textInProgress length] > 0)
    136     {
    137         [dictInProgress setObject:textInProgress forKey:kXMLReaderTextNodeKey];
    138 
    139         // Reset the text
    140         [textInProgress release];
    141         textInProgress = [[NSMutableString alloc] init];
    142     }
    143     
    144     // Pop the current dict
    145     [dictionaryStack removeLastObject];
    146 }
    147 
    148 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
    149 {
    150     // Build the text value
    151     [textInProgress appendString:string];
    152 }
    153 
    154 - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
    155 {
    156     // Set the error pointer to the parser's error object
    157     *errorPointer = parseError;
    158 }
    159 
    160 @end
    View Code

    4:GitHub下载:https://github.com/amarcadet/XMLReader/archive/master.zip

  • 相关阅读:
    WHERE col1=val1 AND col2=val2;index exists on col1 and col2, the appropriate rows can be fetched directly
    MySQL 交集 实现方法
    MBProgressHUD的使用
    Xcode4 使用 Organizer 分析 Crash logs(转)
    SimpleXML 使用详细例子
    PHP的XML Parser(转)
    iPhone,iPhone4,iPad程序启动画面的总结 (转)
    Pop3得到的Email 信件格式介绍
    yii总结
    隐藏Tabbar的一些方法
  • 原文地址:https://www.cnblogs.com/cocoajin/p/3082507.html
Copyright © 2020-2023  润新知