Кодирование символов перевода строки в значении атрибута NSXMLElement

Поле комментариев базы данных XML, которую я читаю и пишу, хранится как атрибут NSXMLElement. Одна запись содержит символ перевода строки (0x0a). Они кодируются не кодером NSXML в документе, который я анализирую как 
 и получить правильный анализ NSXML. Они приводят к тому, что строка NSString содержит в памяти значение Юникода 0x0a 0x00 (порядок байтов Intel).

Например:

<INFO BITRATE="192000" GENRE="Podcast" COMMENT="Test &amp; More Test &#xA;&#xA;After the Line Feeds"</INFO>

При записи этой NSString обратно в качестве значения атрибута NSXMLElement она не возвращается обратно и приводит к следующему выводу в файл xml:

 <INFO BITRATE="192000" GENRE="Podcast" COMMENT="Test &amp; More Test 

After the Line Feeds"</INFO>

что, конечно, не анализируется должным образом при повторном чтении файла.

Кажется, что параметры узла, такие как NSXMLNodePreserveCharacterReferences или же NSXMLNodePreserveEntities Должен быть путь, но это никак не поможет.

Должно быть, я упускаю очевидное, но я застрял на этом весь день.

2 ответа

Решение

Проверено в Apple, это известная проблема с NSXMLDocument, и теперь она была подана как отчет об ошибке.

Предложенный обходной путь включает использование libxml2 в настоящее время.

Я опубликую комментарий, если увижу, что это исправлено в следующем выпуске.

Apple говорит:

Опции с "Preserve" в их именах применимы только при анализе внешних источников XML; они не влияют на объекты узлов, которые создаются программно. Другие параметры используются в методах инициализации и вывода NSXMLDocument; см. справочную документацию NSXMLDocument для деталей. Это не работает для меня, я думаю, что это ошибка.

Я решил эту проблему с KissXML.

Другие вопросы по тегам