#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, и вы почти закончите синтаксический анализ и запись.Пожалуйста, найдите документы и руководство по