Хорошие подходы для обработки XML в C ++ - PullRequest
0 голосов
/ 29 марта 2011

Я работаю над многопоточным приложением для обработки сообщений, написанным на C ++. Приложение получает сообщения XML, выполняет некоторые действия и может при необходимости опубликовать сообщение XML в другой службе.

В настоящее время приложение работает, извлекая данные во время синтаксического анализа сообщения и выполняя некоторые действия над этим сообщением в середине синтаксического анализа. Это кажется плохой практикой для меня. У меня есть возможность создать альтернативу, и я рассматриваю подходы, которые могу использовать.

Один метод, о котором я подумал, - это сериализацию данных xml в объект данных, а по завершении извлекать и обрабатывать данные по мере необходимости. Недостатком будет то, что мне придется создавать новый класс для каждого отдельного xml-сообщения, которое я обрабатываю (вероятно, около 30), но этот подход кажется более чистым, чем тот, который я имею сейчас.

Есть ли лучший способ, чем этот? Следует также упомянуть, что любые библиотеки кода, разработанные за пределами США, вряд ли будут одобрены.

Ответы [ 3 ]

1 голос
/ 29 марта 2011

Обычно есть два подхода к синтаксическому анализу XML: DOM и SAX. DOM создает объектную модель документа (например, то, что вы предлагаете), тогда как SAX вызывает обратные вызовы, когда части документа посещаются во время синтаксического анализа. Бесплатная общеизвестная библиотека libxml2 поддерживает оба метода анализа.

Как правило, подход SAX (т. Е. Использование обратных вызовов, которые выполняются при посещении документа), использует меньше памяти и может привести к снижению задержки для конечного пользователя, поскольку вы можете начать обработку немедленно, вместо того, чтобы ждать весь документ должен быть проанализирован и собран.

Тот факт, что ваша программа является многопоточной, является красной селедкой. Пока вы всегда передаете объект в каждый из ваших обратных вызовов, и этот объект не используется совместно для потоков, вы можете безопасно делать это с несколькими различными такими объектами в нескольких различных потоках. Использование стандартной библиотеки, такой как libxml2, для анализа также целесообразно с точки зрения повторного использования.

1 голос
/ 29 марта 2011

Вероятно, были приняты некоторые конструктивные решения, которые привели к такому подходу (например, быстрее обрабатывать с использованием SAX-подобной модели, чем DOM-подобной модели), причем для последнего необходимо проанализировать все сообщение с помощью В первом случае вы можете принимать решения, когда вам перезванивают с данными.

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

1 голос
/ 29 марта 2011

В настоящее время приложение работает

Тогда что именно вы исправляете?

Не исправляйте то, что не сломано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...