NSXML заменяет «<» на «% lt;» - PullRequest
1 голос
/ 28 ноября 2009

Я вижу, что есть другие вопросы, связанные с этим, но ни один из них не использует NSXML.

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

Пример:

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

Тогда, когда я делаю

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

Я получаю узел со всеми символами «<», замененными на «& lt;». Однако, когда я делаю </p>

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

Я получаю правильный вывод строки. Этот документ XML будет сохранен в виде файла KML для Google Планета Земля, и Google Планета Земля выдает мне сообщение об ошибке, когда находит "& lt;" маркер. Любая идея, как заставить NSXML просто вывести '<'? Я использую OSX 10.6 и XCode 3.2 между прочим. </p>

1 Ответ

6 голосов
/ 28 ноября 2009

Есть специальный флажок опций для указания 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];
...