Я использую gSOAP для генерации кода парсинга XML из схемы XSD, которую я подготовил сам. Это не имеет ничего общего с веб-сервисами. Данные XML читаются из локального файла или в буфере памяти (при условии istream
в soap
).
Сначала это кажется достаточно простым. Но теперь, когда я использую его все больше и больше, я начинаю видеть некоторые проблемы.
Например, имена вводятся в глобальное пространство имен. Можно принудительно использовать пространство имен, но тогда построение становится намного более сложным (из-за необходимости генерировать дополнительный код для обработки ошибок), можно использовать только одно пространство имен, и из-за использования макросов это может вызвать и другие проблемы.
И вам НУЖНО эти пространства имен, если у вас есть более одной схемы на двоичную единицу сборки (.exe
, .dll
…)!
Так что я начал думать о какой-то альтернативе. Тем более, что мне не нужен этот персонал веб-сервисов. Только автоматическая генерация кода для разбора XML на основе XSD.
Есть ли такие альтернативы (для нативного C ++)? Кто они такие?
Вот большой список ресурсов о привязке данных XML:
http://www.rpbourret.com/xml/XMLDataBinding.htm
Преобразование XSD с помощью wsdl2h из gSOAP не дает пространств имен C ++, а скорее сопоставляет пространства имен XSD с префиксным соглашением имен (ns__name), которое довольно легко использовать и которое позволяет избежать столкновений имен в C (и C ++). Любой инструмент связывания должен обеспечивать соблюдение правил сопоставления такого рода. Почему вы утверждаете, что «И вам НУЖНО эти пространства имен, когда у вас есть более одной схемы на двоичную единицу сборки»? Вы можете просто запустить wsdl2h на всех XSD вместе.