Лучший способ удалить объявление XML из BSTR

Мне интересно, может ли кто-нибудь помочь мне, пытаясь удалить объявление XML из строки, содержащей документ XML. Любая помощь будет оценена. Мы используем MSXML 4.0, но у меня возникли трудности с его использованием, и я просто сделал подстроку. Я не очень знаком с ATL и другими Microsoft SDK. Это работает, но небольшая часть меня умерла внутри, и я бы предпочел сделать это менее хрупким образом.

Изменить: в настоящее время я делаю подстроку при первом появлении символа новой строки. Я пытался токенизировать или подстроку в "?>" Декларации XML, но у меня возникают проблемы при получении соответствия символов (с использованием wcstok и подстроки). Я пробовал "\?>", "\?>" И "?>". Идеальным решением было бы загрузить документ в объект XMLDocument и просто получить текст тела сообщения.

1 ответ

Посмотрите спецификацию XML, особенно грамматику для prolog:

[22] пролог::= XMLDecl? Разное * (doctypedecl Разное *)?

[23] XMLDecl:: = ''

Итак, ваш код handspun должен уметь анализировать VersionInfo, EncodingDecl а также SDDecl вместе с начальным и конечным токенами тега объявления XML. Для получения дополнительной информации об этих отдельных пунктах см. Спецификацию.

Тем не менее, я предлагаю использовать правильный инструмент для правильной работы: использовать XML-инструментарий / анализатор. (Разница между анализатором и инструментарием состоит в том, что инструментарий будет поддерживать расширенные операции, такие как проверка DTD, обработка пространства имен, XPath и т. Д.).

MSXML4 довольно старый. MSXML6 является последним. Однако MSXML6 довольно бесполезен для всего, кроме небольших файлов XML. Итак, выберите парсер в зависимости от размера входного файла (если важна производительность). Есть свободно доступные библиотеки, такие как Xerces, RapidXML, pugixml и т. Д., Которые имеют гораздо лучшую производительность.

Кроме того, можете ли вы указать, с какими трудностями вы столкнулись с MSXML4?

Другие вопросы по тегам