我正在爲需要創建XML文檔的iOS創建應用程序。我通過KissXML來做到這一點。部分XML看起來像如何使用KissXML編寫CDATA?
<ISIN><![CDATA[12345678]]></ISIN>
我在KissXML中找不到任何選項來創建CDATA部分。簡單地添加一個字符串作爲文本的CDATA的東西將導致逃避特殊字符,如<和>。任何人都可以給我一個關於如何使用KissXML編寫CDATA的提示?
我正在爲需要創建XML文檔的iOS創建應用程序。我通過KissXML來做到這一點。部分XML看起來像如何使用KissXML編寫CDATA?
<ISIN><![CDATA[12345678]]></ISIN>
我在KissXML中找不到任何選項來創建CDATA部分。簡單地添加一個字符串作爲文本的CDATA的東西將導致逃避特殊字符,如<和>。任何人都可以給我一個關於如何使用KissXML編寫CDATA的提示?
即使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可用。
我自己找到了解決方法 - 這個想法基本上是將CDATA僞裝成一個新的XML Doc。一些可用的代碼:
+(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!這只是我認爲是一個「骯髒的黑客」。它有效,但感覺不對。我會很感激這個「好」的解決方案。