2009-11-28 7 views
1

Я вижу, есть другие вопросы, связанные с этим, но никто не использует NSXML.NSXML заменяет "<" на "% lt;"

Итак, я строю XML-документ с нуля с помощью NSXML, и когда я создаю NSXMLNode со строковым значением, все символы «<» в этой строке заменяются на «& lt;» когда я вывожу узел или сохраняю его в файл.

Пример:

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

Затем, когда я

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

Я получаю узел со всеми '<' символов заменены на "& ЛТ;". Однако, когда я делаю

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

Я получаю правильный вывод строки. Этот XML-документ будет сохранен как файл KML для google earth, а земля google даст мне ошибку, когда найдет «& lt;» маркер. Любая идея, как заставить NSXML выводить «<»? Я использую OSX 10.6 и XCode 3.2 кстати.

ответ

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]; 
Смежные вопросы