2012-06-11 1 views
2

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

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

+1

Можете ли вы добавить код к вопросу, чтобы проиллюстрировать эту проблему? в чем именно проблема?: Что теперь «хрупка»? – PermanentGuest

+0

Вопрос обновлен с дополнительной информацией. – binarymelon

ответ

0

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

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

[23] XMLDecl :: = '<? Xml' VersionInfo EncodingDecl? SDDecl? S? «?>»

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

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

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

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