Каков хороший способ кодирования произвольного текста в 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><b>Bold Text</b></html>
против
<html><![CDATA[<b>Bold Text</b>]]></html>
Хм, насколько я могу судить, разделы CDATA предназначены для символьных данных, а управляющие символы не учитываются. Я предполагаю, что это означает, что в случае перевода строки XML-парсеры решают, являются ли они символом управления или нет (исторически, да, но практически... нет.).
Хотя это может ухудшить читабельность, вы можете кодировать новые строки с помощью escape-последовательностей. Если вы правильно экранируете, синтаксический анализ должен преобразовать его правильно, вам просто нужно будет записать это при кодировании.
Другой вариант, который полностью нарушает ваше "удобочитаемое" требование, заключается в кодировании текста с помощью base-64, что позволяет кодировать произвольную информацию в XML.