Skip to content

Commit

Permalink
Possibility to initialize with HTML data
Browse files Browse the repository at this point in the history
  • Loading branch information
myell0w committed Apr 10, 2012
1 parent dec1e2d commit 8ccb771
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 30 deletions.
2 changes: 2 additions & 0 deletions RaptureXML/RXMLElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,15 @@ typedef void (^RXMLBlock)(RXMLElement *element);
+ (id)elementWithURL:(NSURL *)url;
+ (id)elementWithData:(NSData *)data;
+ (id)elementWithNode:(xmlNodePtr)node;
+ (id)elementWithHTMLData:(NSData *)data;

- (id)initWithString:(NSString *)xmlString encoding:(NSStringEncoding)encoding;
- (id)initWithFilepath:(NSString *)filename;
- (id)initWithFilename:(NSString *)filename extension:(NSString *)extension;
- (id)initWithURL:(NSURL *)url;
- (id)initWithData:(NSData *)data;
- (id)initWithNode:(xmlNodePtr)node;
- (id)initWithHTMLData:(NSData *)data;

- (NSString *)attribute:(NSString *)attributeName;
- (NSString *)attribute:(NSString *)attributeName inNamespace:(NSString *)xmlNamespace;
Expand Down
81 changes: 51 additions & 30 deletions RaptureXML/RXMLElement.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
//

#import "RXMLElement.h"
#import <libxml/HTMLparser.h>
#import <libxml/xpath.h>
#import <libxml/xpathInternals.h>

Expand All @@ -38,7 +39,7 @@ @interface RXMLElement () {
xmlNodePtr _node;
}

- (void)setupWithData:(NSData *)data;
- (void)setupWithData:(NSData *)data isHTML:(BOOL)html;

@end

Expand All @@ -48,6 +49,38 @@ @implementation RXMLElement
@synthesize text = _text;
@synthesize tagName = _tagName;

////////////////////////////////////////////////////////////////////////
#pragma mark - Class Methods
////////////////////////////////////////////////////////////////////////

+ (id)elementWithString:(NSString *)attributeXML_ encoding:(NSStringEncoding)encoding {
return [[RXMLElement alloc] initWithString:attributeXML_ encoding:encoding];
}

+ (id)elementWithFilepath:(NSString *)filename {
return [[RXMLElement alloc] initWithFilepath:filename];
}

+ (id)elementWithFilename:(NSString *)filename extension:(NSString *)extension {
return [[RXMLElement alloc] initWithFilename:filename extension:extension];
}

+ (id)elementWithURL:(NSURL *)url {
return [[RXMLElement alloc] initWithURL:url];
}

+ (id)elementWithData:(NSData *)data {
return [[RXMLElement alloc] initWithData:data];
}

+ (id)elementWithNode:(xmlNodePtr)node {
return [[RXMLElement alloc] initWithNode:node];
}

+ (id)elementWithHTMLData:(NSData *)data {
return [[RXMLElement alloc] initWithHTMLData:data];
}

////////////////////////////////////////////////////////////////////////
#pragma mark - Lifecycle
////////////////////////////////////////////////////////////////////////
Expand All @@ -56,7 +89,7 @@ - (id)initWithString:(NSString *)xmlString encoding:(NSStringEncoding)encoding {
if ((self = [super init])) {
NSData *data = [xmlString dataUsingEncoding:encoding];

[self setupWithData:data];
[self setupWithData:data isHTML:NO];
}

return self;
Expand All @@ -67,7 +100,7 @@ - (id)initWithFilepath:(NSString *)filename {
NSString *fullPath = [[[NSBundle bundleForClass:self.class] bundlePath] stringByAppendingPathComponent:filename];
NSData *data = [NSData dataWithContentsOfFile:fullPath];

[self setupWithData:data];
[self setupWithData:data isHTML:NO];
}

return self;
Expand All @@ -78,7 +111,7 @@ - (id)initWithFilename:(NSString *)filename extension:(NSString *)extension {
NSString *fullPath = [[NSBundle bundleForClass:[self class]] pathForResource:filename ofType:extension];
NSData *data = [NSData dataWithContentsOfFile:fullPath];

[self setupWithData:data];
[self setupWithData:data isHTML:NO];
}

return self;
Expand All @@ -88,15 +121,15 @@ - (id)initWithURL:(NSURL *)url {
if ((self = [super init])) {
NSData *data = [NSData dataWithContentsOfURL:url];

[self setupWithData:data];
[self setupWithData:data isHTML:NO];
}

return self;
}

- (id)initWithData:(NSData *)data {
if ((self = [super init])) {
[self setupWithData:data];
[self setupWithData:data isHTML:NO];
}

return self;
Expand All @@ -111,28 +144,12 @@ - (id)initWithNode:(xmlNodePtr)node {
return self;
}

+ (id)elementWithString:(NSString *)attributeXML_ encoding:(NSStringEncoding)encoding {
return [[RXMLElement alloc] initWithString:attributeXML_ encoding:encoding];
}

+ (id)elementWithFilepath:(NSString *)filename {
return [[RXMLElement alloc] initWithFilepath:filename];
}

+ (id)elementWithFilename:(NSString *)filename extension:(NSString *)extension {
return [[RXMLElement alloc] initWithFilename:filename extension:extension];
}

+ (id)elementWithURL:(NSURL *)url {
return [[RXMLElement alloc] initWithURL:url];
}

+ (id)elementWithData:(NSData *)data {
return [[RXMLElement alloc] initWithData:data];
}

+ (id)elementWithNode:(xmlNodePtr)node {
return [[RXMLElement alloc] initWithNode:node];
- (id)initWithHTMLData:(NSData *)data {
if ((self = [super init])) {
[self setupWithData:data isHTML:YES];
}

return self;
}

- (void)dealloc {
Expand Down Expand Up @@ -487,8 +504,12 @@ - (void)iterateChildrenMatchingXPathQuery:(NSString *)query usingBlock:(RXMLBloc
#pragma mark - Private
////////////////////////////////////////////////////////////////////////

- (void)setupWithData:(NSData *)data {
_document = xmlReadMemory([data bytes], (int)[data length], "", nil, XML_PARSE_RECOVER);
- (void)setupWithData:(NSData *)data isHTML:(BOOL)html {
if (html) {
_document = htmlReadMemory(data.bytes, (int)data.length, "", NULL, HTML_PARSE_NOWARNING | HTML_PARSE_NOERROR);
} else {
_document = xmlReadMemory(data.bytes, (int)data.length, "", nil, XML_PARSE_RECOVER);
}

if (_document != NULL) {
_node = xmlDocGetRootElement(_document);
Expand Down

0 comments on commit 8ccb771

Please sign in to comment.