Каков хороший способ кодирования произвольного текста в XML понятным для человека способом?

До сих пор я помещал текст в теги CDATA и рассматривал возможность появления концов CDATA в тексте, разбивая его на несколько смежных CDATA.

Я не уверен в этом, но парсеры XML могут не сохранить новые строки внутри тегов CDATA, правильно? Это будет означать как-то избежать их...

Я хочу сгенерировать эти XML-файлы, используя Perl, и проанализировать их с помощью C++ (используя expat), Java и C#.

Самое главное, я хочу, чтобы полученные файлы были несколько удобочитаемыми / модифицируемыми. Кто-нибудь знает какие-либо схемы кодирования, которые соответствуют этим потребностям? Я использую это для хранения данных для базы данных, поэтому она должна принимать произвольный текст, а при разборе возвращать точно такой же текст.

3 ответа

Решение

XML уже поддерживает это, вам не нужно делать ничего особенного и вам, конечно, не нужно использовать CDATA. просто используйте приличную библиотеку, убедитесь, что вы используете кодировку UTF-8, и добавьте текстовый узел. если что-то "теряет" переводы строки, то это ошибка. У xml уже есть "кодировка" (экранирование), которая относительно удобочитаема. это также стандарт, который делает его гораздо более полезным, чем придумывать свой.

см., например, /questions/43472056/kak-ya-mogu-izbezhat-teksta-dlya-xml-dokumenta-v-perl/43472067#43472067

Вы можете закодировать контент, если контент был HTML, например:

<html>&lt;b&gt;Bold Text&lt;/b&gt;</html>

против

<html><![CDATA[<b>Bold Text</b>]]></html>

Хм, насколько я могу судить, разделы CDATA предназначены для символьных данных, а управляющие символы не учитываются. Я предполагаю, что это означает, что в случае перевода строки XML-парсеры решают, являются ли они символом управления или нет (исторически, да, но практически... нет.).

Хотя это может ухудшить читабельность, вы можете кодировать новые строки с помощью escape-последовательностей. Если вы правильно экранируете, синтаксический анализ должен преобразовать его правильно, вам просто нужно будет записать это при кодировании.

Другой вариант, который полностью нарушает ваше "удобочитаемое" требование, заключается в кодировании текста с помощью base-64, что позволяет кодировать произвольную информацию в XML.

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