NSXML替换“<”用“%lt;”

时间:2009-11-28 19:26:10

标签: objective-c xml cocoa nsxml

我看到还有其他与此相关的问题,但没有一个使用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。

1 个答案:

答案 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];