1

これに関連する他の質問があるようですが、NSXML を使用するものはありません。

そのため、NSXML を使用してゼロから XML ドキュメントを構築しています。文字列値で NSXMLNode を作成すると、その文字列のすべての「<」文字が「& lt;」に置き換えられます。ノードを出力するとき、またはファイルに保存するとき。

例:

 NSXMLNode *description = [NSXMLNode elementWithName:@"description"
                               stringValue:@"<![CDATA[Some Description</a>]]>"];

それから私がするとき

 NSLog(@"description: %@", description);

すべての「<」文字が「& lt;」に置き換えられたノードを取得します。しかし、私がするとき

 NSLog(@"description string value: %@", [description stringValue]);

正しい文字列出力が得られます。この XML ドキュメントは、Google Earth の KML ファイルとして保存されます。Google Earth で「& lt;」が検出されると、エラーが表示されます。トークン。NSXML で '<' だけを出力する方法はありますか? OSX 10.6 と XCode 3.2 を使用しています。

4

1 に答える 1

6

ここで役立つ CDATA を示すための特別なオプション フラグがあります。コツは、cocoa に<![CDATA[とブックエンドを書かせる]]ことです:

NSXMLNode *cdata = [[[NSXMLNode alloc] initWithKind:NSXMLTextKind
                                            options:NSXMLNodeIsCDATA] autorelease];
[cdata setStringValue:@"Some CDATA Description"];

NSXMLElement *description = [NSXMLNode elementWithName:@"description"];
[description addChild:cdata];

NSLog(@"description: %@", description);

// yields: <description><![CDATA[Some CDATA Description]]></description>

山かっこがそのままの状態で文字列を取得するには、次のようにします。

NSString *output = [description XMLString];
于 2009-11-28T20:30:51.920 に答える