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 文档将被保存为谷歌地球的 KML 文件,当它找到“<”时,谷歌地球给了我一个错误 令牌。知道如何让 NSXML 只输出“<”吗?我正在使用 OSX 10.6 和 XCode 3.2 顺便说一句。

4

1 回答 1

6

有一个用于指示 CDATA 的特殊选项标志在这里会有所帮助。诀窍是让可可为您编写<![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 回答