我看到还有其他与此相关的问题,但没有一个使用NSXML。
所以,我正在使用NSXML从头开始构建一个XML文档,当我创建一个带字符串值的NSXMLNode时,所有的“<”该字符串中的字符将替换为“& lt;”当我输出节点,或将其保存到文件。
示例:
NSXMLNode *description = [NSXMLNode elementWithName:@"description"
stringValue:@"<![CDATA[Some Description</a>]]>"];
然后当我做
NSLog(@"description: %@", description);
我得到了所有'&lt;'的节点字符替换为“&amp; lt;”。但是当我做的时候
NSLog(@"description string value: %@", [description stringValue]);
我得到正确的字符串输出。这个XML文档将保存为谷歌地球的KML文件,谷歌地球在发现“&amp; lt;”时给我一个错误令牌。知道如何让NSXML输出'&lt;'?我正在使用OSX 10.6和XCode 3.2 btw。
答案 0 :(得分: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];