Использование XML-файлов для хранения данных

#c #xml

#c #xml

Вопрос:

Если я собираюсь использовать XML-файл для хранения некоторой информации, понадобится ли мне анализатор XML для чтения / записи данных? Могу ли я просто использовать функции обработки строк и почему нет?

Ответ №1:

Возможно, вы могли бы использовать функции обработки строк, поскольку это то, что в конечном итоге используют библиотеки XML в любом случае. XML-документы — это просто длинные строки в специальном формате. Однако, если вы не знаете много о XML (и о том, что такое допустимый XML, а что недопустимый XML), использование анализатора / сериализатора XML сейчас избавит вас от множества проблем в дальнейшем. В XML есть нюансы (пространства имен, escape-последовательности и т.д.), Которые могут вызвать проблемы в доморощенном коде, который не знает, как с ними правильно обращаться. И к тому времени, когда вы разберетесь со всеми особыми случаями, вы все равно фактически напишете недоделанный анализатор XML.

Ответ №2:

Не следует… Я повторяю… Не анализируйте и не создавайте XML вручную.

В моей работе мы реализуем множество интерфейсов между различными поставщиками. Я не могу сказать вам, сколько раз мы работали над интерфейсом на основе xml и сталкивались с какой-то проблемой кодирования / декодирования escape. Один из первых тестов, который я выполню при подключении к сервису на основе xml, заключается в том, чтобы ввести во входные данные недопустимые XML-символы.

Как вас зовут?: bob<>amp;»

!ОШИБКА ПРИ РАЗБОРЕ XML-ДОКУМЕНТА!

Мы сталкивались с этим так много раз, что если кто-либо из наших инженеров проверит что-нибудь похожее на:

xml = "<корневой узел>"
xml  = "<конечный узел>"   someValue   "</конечный узел>"
xml  = "</корневой узел>"

мы серьезно подумаем о том, чтобы привязать их к переменной pay. Как только «someValue» содержит недопустимый символ, вас выгнали. Затем ваш код начинает выглядеть следующим образом:

xml = "<корневой узел>"
xml  = "<конечный узел>"   XmlEscape (некоторое значение)   "</конечный узел>"
xml  = "<конечный узел>"   XmlEscape (некоторое значение)   "</конечный узел>"
xml  = "</корневой узел>"

Тогда что-то все еще не работает, поэтому гениальный инженер пытается:

xml = "<корневой узел>"
xml  = "<конечный узел>"   XmlEscape (некоторое значение)   "</конечный узел>"
xml  = "<конечный узел>"   XmlEscape (некоторое значение)   "</конечный узел>"
xml  = "</корневой узел>"

xml = XmlEscape(xml)

Примечание: этот процесс на самом деле происходил со мной дважды во время работы над интерфейсом.

Не успеете вы оглянуться, как ваш поток по проводам будет выглядеть так

amp;amp;< корневой узел>СПРАВКА<корневой узел>
amp;amp;< корневой узел>MEamp;amp;< корневой узел amp; >

Краткие сведения:

Пожалуйста, используйте библиотеку. спасибо, пока.

Комментарии:

1. какую библиотеку использовать с XML? существует ли какая-то встроенная или стандартная библиотека?

2. В Java это библиотеки, в Ruby — драгоценные камни. Предполагая Java, перейдите на веб-сайт apache и посмотрите на их инструменты.

Ответ №3:

Мы можем использовать tinyXml2 и упростить нашу работу, просто включите заголовок и cpp-файл tinyxml2, и вы почти закончите синтаксический анализ и запись.Пожалуйста, найдите документы и руководство по

http://www.grinninglizard.com/tinyxml2/