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

То, что я имею до сих пор, - это помещать текст в теги CDATA и иметь дело с возможностью появления концов CDATA в тексте, разбивая его на несколько смежных CDATA.

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

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

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

Ответы [ 3 ]

1 голос
/ 08 марта 2012

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

см. Например https://stackoverflow.com/a/1140802/181772

0 голосов
/ 08 марта 2012

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

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

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

0 голосов
/ 08 марта 2012

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

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

против

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