From 414134aec77dcebcc622391b76954450707f9988 Mon Sep 17 00:00:00 2001 From: Ewan Mellor Date: Thu, 19 Mar 2015 18:58:52 -0700 Subject: [PATCH] Add support for CDATA elements. This adds a constructor for DDXMLElement that turns into a call to xmlNewCDataBlock and adds the CDATA node as a child of the DDXMLElement node. This also adds the appropriate helper to DDXMLNode. --- KissXML/DDXMLElement.h | 1 + KissXML/DDXMLElement.m | 17 +++++++++++++++++ KissXML/DDXMLNode.h | 2 ++ KissXML/DDXMLNode.m | 5 +++++ 4 files changed, 25 insertions(+) diff --git a/KissXML/DDXMLElement.h b/KissXML/DDXMLElement.h index 379ab107..44238279 100644 --- a/KissXML/DDXMLElement.h +++ b/KissXML/DDXMLElement.h @@ -26,6 +26,7 @@ - (id)initWithName:(NSString *)name; - (id)initWithName:(NSString *)name URI:(NSString *)URI; - (id)initWithName:(NSString *)name stringValue:(NSString *)string; +- (id)initWithName:(NSString *)name cdata:(NSString *)cdata; - (id)initWithXMLString:(NSString *)string error:(NSError **)error; #pragma mark --- Elements by name --- diff --git a/KissXML/DDXMLElement.m b/KissXML/DDXMLElement.m index 012299fe..88b4ca3c 100644 --- a/KissXML/DDXMLElement.m +++ b/KissXML/DDXMLElement.m @@ -101,6 +101,23 @@ - (id)initWithName:(NSString *)name stringValue:(NSString *)string return result; } +- (id)initWithName:(NSString *)name cdata:(NSString *)cdata +{ + xmlNodePtr node = xmlNewNode(NULL, [name xmlChar]); + if (node == NULL) + { + return nil; + } + + const char * content = cdata.UTF8String; + xmlNodePtr cdataNode = xmlNewCDataBlock(node->doc, BAD_CAST content, (int)strlen(content)); + xmlAddChild(node, cdataNode); + + DDXMLElement *result = [self initWithElementPrimitive:node owner:nil]; + + return result; +} + - (id)initWithXMLString:(NSString *)string error:(NSError **)error { DDXMLDocument *doc = [[DDXMLDocument alloc] initWithXMLString:string options:0 error:error]; diff --git a/KissXML/DDXMLNode.h b/KissXML/DDXMLNode.h index 5d49862d..701c990b 100644 --- a/KissXML/DDXMLNode.h +++ b/KissXML/DDXMLNode.h @@ -75,6 +75,8 @@ enum { + (id)elementWithName:(NSString *)name stringValue:(NSString *)string; ++ (id)elementWithName:(NSString *)name cdata:(NSString *)cdata; + + (id)elementWithName:(NSString *)name children:(NSArray *)children attributes:(NSArray *)attributes; + (id)attributeWithName:(NSString *)name stringValue:(NSString *)stringValue; diff --git a/KissXML/DDXMLNode.m b/KissXML/DDXMLNode.m index a2cbabcd..5f71250d 100644 --- a/KissXML/DDXMLNode.m +++ b/KissXML/DDXMLNode.m @@ -88,6 +88,11 @@ + (id)elementWithName:(NSString *)name stringValue:(NSString *)string return [[DDXMLElement alloc] initWithName:name stringValue:string]; } ++ (id)elementWithName:(NSString *)name cdata:(NSString *)cdata +{ + return [[DDXMLElement alloc] initWithName:name cdata:cdata]; +} + + (id)elementWithName:(NSString *)name children:(NSArray *)children attributes:(NSArray *)attributes { DDXMLElement *result = [[DDXMLElement alloc] initWithName:name];