XMLドキュメントを作成する必要があるiOS用のアプリケーションを作成しています。私はKissXMLを介してこれを行います。XMLの一部は次のようになります
<ISIN><![CDATA[12345678]]></ISIN>
KissXMLにCDATAパーツを作成するためのオプションが見つかりません。テキストとしてCDATAのものを含む文字列を追加するだけで、<や>などの特殊文字がエスケープされます。KissXMLを使用してCDATAを作成する方法のヒントを教えてもらえますか?
XMLドキュメントを作成する必要があるiOS用のアプリケーションを作成しています。私はKissXMLを介してこれを行います。XMLの一部は次のようになります
<ISIN><![CDATA[12345678]]></ISIN>
KissXMLにCDATAパーツを作成するためのオプションが見つかりません。テキストとしてCDATAのものを含む文字列を追加するだけで、<や>などの特殊文字がエスケープされます。KissXMLを使用してCDATAを作成する方法のヒントを教えてもらえますか?
@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
コードはこの要点でも入手できます。
自分で回避策を見つけました。基本的には、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];
}
もう!これは、私が「ダーティハック」と見なすものにすぎません。動作しますが、気分が悪くなります。これに対する「良い」解決策をいただければ幸いです。