2009-11-28 115 views
1

我看到有与此相关的其他问题,但没有使用NSXML。NSXML将“<”替换为“%lt;”

因此,我使用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文件,而谷歌地球发现“& lt;”时会给我一个错误令牌。任何想法如何让NSXML只输出'<'?我使用OSX 10.6和XCode 3.2 btw。

回答

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