C++ 从BSTR中删除XML声明的最佳方法

C++ 从BSTR中删除XML声明的最佳方法,c++,visual-c++,atl,msxml,msxml4,C++,Visual C++,Atl,Msxml,Msxml4,我想知道是否有人能帮我从包含XML文档的字符串中删除XML声明。任何帮助都将不胜感激。我们使用的是MSXML4.0,但我在使用它时遇到了困难,最后只做了一个子字符串。我不太熟悉ATL和其他Microsoft SDK。这是可行的,但我的一小部分在内心死去,我更愿意用一种不那么脆弱的方式来完成 编辑:目前我正在对换行符的第一个匹配项执行子字符串。我试图在XML声明的?>上标记或子字符串,但在使用wcstok和子字符串进行字符匹配时遇到了问题。我试过\?>,\?>和\?>。理想的解决方案是将文档加载到

我想知道是否有人能帮我从包含XML文档的字符串中删除XML声明。任何帮助都将不胜感激。我们使用的是MSXML4.0,但我在使用它时遇到了困难,最后只做了一个子字符串。我不太熟悉ATL和其他Microsoft SDK。这是可行的,但我的一小部分在内心死去,我更愿意用一种不那么脆弱的方式来完成


编辑:目前我正在对换行符的第一个匹配项执行子字符串。我试图在XML声明的?>上标记或子字符串,但在使用wcstok和子字符串进行字符匹配时遇到了问题。我试过\?>,\?>和\?>。理想的解决方案是将文档加载到XMLDocument对象中,只获取消息正文的文本。

查找XML规范,特别是以下内容的语法:

[22]序言::=XMLDecl?杂项*doctypedecl杂项*

[23]XMLDecl::=

因此,您的手推代码应该能够解析VersionInfo、EncodingDecl和SDDecl以及XML声明标记start和end标记。有关这些单独项目的更多信息,请参阅规范

然而,我的建议是为正确的工作使用正确的工具:使用XML工具包/解析器。解析器和工具箱之间的区别主要在于工具箱将支持高级操作,如DTD验证、命名空间处理、XPath等

MSXML4已经很老了。MSXML6是最新的。然而,MSXML6对于小XML文件之外的任何东西都是毫无用处的。因此,如果性能很重要,请根据输入文件大小选择解析器。有免费提供的库,如Xerces、RapidXML、pugixml等,它们具有更好的性能


另外,您是否可以指定MSXML4遇到了哪些困难?

请查阅XML规范,特别是以下内容的语法:

[22]序言::=XMLDecl?杂项*doctypedecl杂项*

[23]XMLDecl::=

因此,您的手推代码应该能够解析VersionInfo、EncodingDecl和SDDecl以及XML声明标记start和end标记。有关这些单独项目的更多信息,请参阅规范

然而,我的建议是为正确的工作使用正确的工具:使用XML工具包/解析器。解析器和工具箱之间的区别主要在于工具箱将支持高级操作,如DTD验证、命名空间处理、XPath等

MSXML4已经很老了。MSXML6是最新的。然而,MSXML6对于小XML文件之外的任何东西都是毫无用处的。因此,如果性能很重要,请根据输入文件大小选择解析器。有免费提供的库,如Xerces、RapidXML、pugixml等,它们具有更好的性能


另外,您可以指定MSXML4遇到了哪些困难吗?

您可以在问题中添加一些代码来说明问题吗?到底是什么问题?现在什么是“脆弱的”?问题更新了更多信息。你能给问题添加一些代码来说明问题吗?到底是什么问题?现在什么是“易碎品”?问题更新了更多信息。