mirror of
https://github.com/zhigang1992/RestKit.git
synced 2026-01-12 22:51:50 +08:00
Drop bundled XMLReader dependency
This commit is contained in:
17
Vendor/XMLReader/LICENCE
vendored
17
Vendor/XMLReader/LICENCE
vendored
@@ -1,17 +0,0 @@
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
29
Vendor/XMLReader/XMLReader.h
vendored
29
Vendor/XMLReader/XMLReader.h
vendored
@@ -1,29 +0,0 @@
|
||||
//
|
||||
// XMLReader.h
|
||||
//
|
||||
// Created by Troy on 9/18/10.
|
||||
// Updated by Antoine Marcadet on 9/23/11.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
enum {
|
||||
XMLReaderOptionsProcessNamespaces = 1 << 0, // Specifies whether the receiver reports the namespace and the qualified name of an element.
|
||||
XMLReaderOptionsReportNamespacePrefixes = 1 << 1, // Specifies whether the receiver reports the scope of namespace declarations.
|
||||
XMLReaderOptionsResolveExternalEntities = 1 << 2, // Specifies whether the receiver reports declarations of external entities.
|
||||
};
|
||||
typedef NSUInteger XMLReaderOptions;
|
||||
|
||||
@interface XMLReader : NSObject <NSXMLParserDelegate>
|
||||
{
|
||||
NSMutableArray *dictionaryStack;
|
||||
NSMutableString *textInProgress;
|
||||
NSError * __autoreleasing *errorPointer;
|
||||
}
|
||||
|
||||
+ (NSDictionary *)dictionaryForXMLData:(NSData *)data error:(NSError **)errorPointer;
|
||||
+ (NSDictionary *)dictionaryForXMLString:(NSString *)string error:(NSError **)errorPointer;
|
||||
+ (NSDictionary *)dictionaryForXMLData:(NSData *)data options:(XMLReaderOptions)options error:(NSError **)errorPointer;
|
||||
+ (NSDictionary *)dictionaryForXMLString:(NSString *)string options:(XMLReaderOptions)options error:(NSError **)errorPointer;
|
||||
|
||||
@end
|
||||
186
Vendor/XMLReader/XMLReader.m
vendored
186
Vendor/XMLReader/XMLReader.m
vendored
@@ -1,186 +0,0 @@
|
||||
//
|
||||
// XMLReader.m
|
||||
//
|
||||
// Created by Troy on 9/18/10.
|
||||
// Updated by Antoine Marcadet on 9/23/11.
|
||||
//
|
||||
|
||||
#import "XMLReader.h"
|
||||
|
||||
NSString *const kXMLReaderTextNodeKey = @"text";
|
||||
NSString *const kXMLReaderAttributePrefix = @"@";
|
||||
|
||||
@interface XMLReader ()
|
||||
|
||||
- (id)initWithError:(NSError **)error;
|
||||
- (NSDictionary *)objectWithData:(NSData *)data options:(XMLReaderOptions)options;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation XMLReader
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Public methods
|
||||
|
||||
+ (NSDictionary *)dictionaryForXMLData:(NSData *)data error:(NSError **)error
|
||||
{
|
||||
XMLReader *reader = [[XMLReader alloc] initWithError:error];
|
||||
NSDictionary *rootDictionary = [reader objectWithData:data options:0];
|
||||
[reader release];
|
||||
return rootDictionary;
|
||||
}
|
||||
|
||||
+ (NSDictionary *)dictionaryForXMLString:(NSString *)string error:(NSError **)error
|
||||
{
|
||||
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
|
||||
return [XMLReader dictionaryForXMLData:data error:error];
|
||||
}
|
||||
|
||||
+ (NSDictionary *)dictionaryForXMLData:(NSData *)data options:(XMLReaderOptions)options error:(NSError **)error
|
||||
{
|
||||
XMLReader *reader = [[XMLReader alloc] initWithError:error];
|
||||
NSDictionary *rootDictionary = [reader objectWithData:data options:options];
|
||||
[reader release];
|
||||
return rootDictionary;
|
||||
}
|
||||
|
||||
+ (NSDictionary *)dictionaryForXMLString:(NSString *)string options:(XMLReaderOptions)options error:(NSError **)error
|
||||
{
|
||||
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
|
||||
return [XMLReader dictionaryForXMLData:data options:options error:error];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Parsing
|
||||
|
||||
- (id)initWithError:(NSError **)error
|
||||
{
|
||||
if (self = [super init])
|
||||
{
|
||||
errorPointer = error;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[dictionaryStack release];
|
||||
[textInProgress release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (NSDictionary *)objectWithData:(NSData *)data options:(XMLReaderOptions)options
|
||||
{
|
||||
// Clear out any old data
|
||||
[dictionaryStack release];
|
||||
[textInProgress release];
|
||||
|
||||
dictionaryStack = [[NSMutableArray alloc] init];
|
||||
textInProgress = [[NSMutableString alloc] init];
|
||||
|
||||
// Initialize the stack with a fresh dictionary
|
||||
[dictionaryStack addObject:[NSMutableDictionary dictionary]];
|
||||
|
||||
// Parse the XML
|
||||
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
|
||||
|
||||
[parser setShouldProcessNamespaces:(options & XMLReaderOptionsProcessNamespaces)];
|
||||
[parser setShouldReportNamespacePrefixes:(options & XMLReaderOptionsReportNamespacePrefixes)];
|
||||
[parser setShouldResolveExternalEntities:(options & XMLReaderOptionsResolveExternalEntities)];
|
||||
|
||||
parser.delegate = self;
|
||||
BOOL success = [parser parse];
|
||||
|
||||
[parser release];
|
||||
|
||||
// Return the stack's root dictionary on success
|
||||
if (success)
|
||||
{
|
||||
NSDictionary *resultDict = [dictionaryStack objectAtIndex:0];
|
||||
return resultDict;
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark NSXMLParserDelegate methods
|
||||
|
||||
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
|
||||
{
|
||||
// Get the dictionary for the current level in the stack
|
||||
NSMutableDictionary *parentDict = [dictionaryStack lastObject];
|
||||
|
||||
// Create the child dictionary for the new element, and initilaize it with the attributes
|
||||
NSMutableDictionary *childDict = [NSMutableDictionary dictionary];
|
||||
[childDict addEntriesFromDictionary:attributeDict];
|
||||
|
||||
// If there's already an item for this key, it means we need to create an array
|
||||
id existingValue = [parentDict objectForKey:elementName];
|
||||
if (existingValue)
|
||||
{
|
||||
NSMutableArray *array = nil;
|
||||
if ([existingValue isKindOfClass:[NSMutableArray class]])
|
||||
{
|
||||
// The array exists, so use it
|
||||
array = (NSMutableArray *) existingValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Create an array if it doesn't exist
|
||||
array = [NSMutableArray array];
|
||||
[array addObject:existingValue];
|
||||
|
||||
// Replace the child dictionary with an array of children dictionaries
|
||||
[parentDict setObject:array forKey:elementName];
|
||||
}
|
||||
|
||||
// Add the new child dictionary to the array
|
||||
[array addObject:childDict];
|
||||
}
|
||||
else
|
||||
{
|
||||
// No existing value, so update the dictionary
|
||||
[parentDict setObject:childDict forKey:elementName];
|
||||
}
|
||||
|
||||
// Update the stack
|
||||
[dictionaryStack addObject:childDict];
|
||||
}
|
||||
|
||||
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
|
||||
{
|
||||
// Update the parent dict with text info
|
||||
NSMutableDictionary *dictInProgress = [dictionaryStack lastObject];
|
||||
|
||||
// Set the text property
|
||||
if ([textInProgress length] > 0)
|
||||
{
|
||||
// trim after concatenating
|
||||
NSString *trimmedString = [textInProgress stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
|
||||
[dictInProgress setObject:[[trimmedString mutableCopy] autorelease] forKey:kXMLReaderTextNodeKey];
|
||||
|
||||
// Reset the text
|
||||
[textInProgress release];
|
||||
textInProgress = [[NSMutableString alloc] init];
|
||||
}
|
||||
|
||||
// Pop the current dict
|
||||
[dictionaryStack removeLastObject];
|
||||
}
|
||||
|
||||
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
|
||||
{
|
||||
// Build the text value
|
||||
[textInProgress appendString:string];
|
||||
}
|
||||
|
||||
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
|
||||
{
|
||||
// Set the error pointer to the parser's error object
|
||||
*errorPointer = parseError;
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user