Лучший способ удалить объявление XML из BSTR
Мне интересно, может ли кто-нибудь помочь мне, пытаясь удалить объявление XML из строки, содержащей документ XML. Любая помощь будет оценена. Мы используем MSXML 4.0, но у меня возникли трудности с его использованием, и я просто сделал подстроку. Я не очень знаком с ATL и другими Microsoft SDK. Это работает, но небольшая часть меня умерла внутри, и я бы предпочел сделать это менее хрупким образом.
Изменить: в настоящее время я делаю подстроку при первом появлении символа новой строки. Я пытался токенизировать или подстроку в "?>" Декларации XML, но у меня возникают проблемы при получении соответствия символов (с использованием wcstok и подстроки). Я пробовал "\?>", "\?>" И "?>". Идеальным решением было бы загрузить документ в объект XMLDocument и просто получить текст тела сообщения.
1 ответ
Посмотрите спецификацию XML, особенно грамматику для prolog
:
[22] пролог::= XMLDecl? Разное * (doctypedecl Разное *)?
[23] XMLDecl:: = ' Xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
Итак, ваш код handspun должен уметь анализировать VersionInfo
, EncodingDecl
а также SDDecl
вместе с начальным и конечным токенами тега объявления XML. Для получения дополнительной информации об этих отдельных пунктах см. Спецификацию.
Тем не менее, я предлагаю использовать правильный инструмент для правильной работы: использовать XML-инструментарий / анализатор. (Разница между анализатором и инструментарием состоит в том, что инструментарий будет поддерживать расширенные операции, такие как проверка DTD, обработка пространства имен, XPath и т. Д.).
MSXML4 довольно старый. MSXML6 является последним. Однако MSXML6 довольно бесполезен для всего, кроме небольших файлов XML. Итак, выберите парсер в зависимости от размера входного файла (если важна производительность). Есть свободно доступные библиотеки, такие как Xerces, RapidXML, pugixml и т. Д., Которые имеют гораздо лучшую производительность.
Кроме того, можете ли вы указать, с какими трудностями вы столкнулись с MSXML4?