2012-08-02 4 views
2

XML 문서를 만들어야하는 iOS 용 응용 프로그램을 만들고 있습니다. KissXML을 통해이 작업을 수행합니다. XML 부분은 다음과 같습니다.KissXML로 CDATA를 쓰는 방법은 무엇입니까?

<ISIN><![CDATA[12345678]]></ISIN> 

CDATA 부분을 생성하기 위해 KissXML에서 옵션을 찾을 수 없습니다. 텍스트로 CDATA 항목이있는 문자열을 추가하기 만하면 < 및>과 같은 특수 문자가 이스케이프됩니다. KissXML로 CDATA를 쓰는 방법에 대한 힌트를 누군가 줄 수 있습니까?

답변

0

비록 the solution by @moq이 못생긴지만 작동합니다. 문자열 생성 코드를 정리하고 범주에 추가했습니다.

DDXMLNode + CDATA.h :

#import <Foundation/Foundation.h> 
#import "DDXMLNode.h" 

@interface DDXMLNode (CDATA) 

/** 
Creates a new XML element with an inner CDATA block 
<name><![CDATA[string]]></name> 
*/ 
+ (id)cdataElementWithName:(NSString *)name stringValue:(NSString *)string; 

@end 

DDXMLNode + CDATA.m :

#import "DDXMLNode+CDATA.h" 
#import "DDXMLElement.h" 
#import "DDXMLDocument.h" 

@implementation DDXMLNode (CDATA) 

+ (id)cdataElementWithName:(NSString *)name stringValue:(NSString *)string 
{ 
    NSString* nodeString = [NSString stringWithFormat:@"<%@><![CDATA[%@]]></%@>", name, string, name]; 
    DDXMLElement* cdataNode = [[DDXMLDocument alloc] initWithXMLString:nodeString 
                   options:DDXMLDocumentXMLKind 
                   error:nil].rootElement; 
    return [cdataNode copy]; 
} 

@end 

코드는이 gist에서 사용할 수 있습니다.

0

직접 해결 방법을 찾았습니다. 기본적으로 CDATA를 새로운 XML 문서로 위장하는 것이 아이디어입니다. 작동하는 일부 코드 :

+(DDXMLElement*) createCDataNode:(NSString*)name value:(NSString*)val { 

    NSMutableString* newVal = [[NSMutableString alloc] init]; 
    [newVal appendString:@"<"]; 
    [newVal appendString:name]; 
    [newVal appendString:@">"]; 
    [newVal appendString:@"<![CDATA["]; 
    [newVal appendString:val]; 
    [newVal appendString:@"]]>"]; 
    [newVal appendString:@"</"]; 
    [newVal appendString:name]; 
    [newVal appendString:@">"]; 

    DDXMLDocument* xmlDoc = [[DDXMLDocument alloc] initWithXMLString:newVal options:DDXMLDocumentXMLKind error:nil]; 

    return [[xmlDoc rootElement] copy]; 
} 

GEEZ! 이것은 내가 "더러운 해킹"으로 간주할만한 것입니다. 그것은 작동하지만 그것이 옳다고 느끼지 않습니다. 나는 이것에 "좋은"해결책을 주시면 감사하겠습니다.

관련 문제