我想知道是否有人可以帮助我尝试从包含XML文档的字符串中删除XML声明。任何帮助,将不胜感激。我们正在使用MSXML 4.0,但是我在使用它时遇到了困难,最终只能做一个子字符串。我对ATL和其他Microsoft SDK不太熟悉。它起作用了,但是我的一小部分死在了里面,我宁愿以不那么脆弱的方式来完成它。
编辑:目前,我正在第一次出现换行符的子字符串。我试图在XML声明的“?>”上标记化或子字符串,但是我在获取字符匹配时遇到问题(使用wcstok和子字符串)。我尝试了“\?>”,“\?>”和“?>”。理想的解决方案是将文档加载到XMLDocument对象中,然后仅获取消息正文的文本。
最佳答案
查找XML规范,尤其是 prolog
的语法:
因此,您的手动编码应该能够解析VersionInfo
,EncodingDecl
和SDDecl
以及XML声明标记的开始和结束标记。有关这些单独项目的更多信息,请参见规格。
但是,我的建议是使用正确的工具完成正确的工作:使用XML工具箱/解析器。 (解析器和工具箱之间的区别主要是该工具箱将支持高级操作,例如DTD验证,命名空间处理,XPath等)。
MSXML4很老了。 MSXML6是最新的。但是,MSXML6除了很小的XML文件外几乎没有用。因此,请根据您的输入文件大小选择一个解析器(如果性能很重要)。有免费提供的库,例如Xerces,RapidXML,pugixml等,它们的性能要好得多。
另外,您可以指定使用MSXML4遇到的困难吗?
关于c++ - 从BSTR中删除XML声明的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10983338/