gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:59:39 27 4
gpt4 key购买 nike

我想知道是否有人可以帮助我尝试从包含 XML 文档的字符串中删除 XML 声明。任何帮助,将不胜感激。我们正在使用 MSXML 4.0,但我在使用它时遇到了困难,最终只做了一个子字符串。我对 ATL 和其他 Microsoft SDK 不是很熟悉。它有效,但我的一小部分死在了里面,我更愿意以一种不那么脆弱的方式完成这件事。

编辑:目前我正在对第一次出现的换行符做一个子字符串。我试图对 XML 声明的“?>”进行标记化或子字符串化,但我在获取字符匹配时遇到了问题(使用 wcstok 和子字符串)。我尝试了“\?>”、“\?>”和“?>”。理想的解决方案是将文档加载到 XMLDocument 对象中,然后只获取消息正文的文本。

最佳答案

查找 XML 规范,特别是 prolog 的语法:

[22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?

[23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

因此,您的手工代码应该能够解析 VersionInfoEncodingDeclSDDecl 以及 XML 声明标记开始和结束标记。有关这些单独项目的更多信息,请参阅规范。

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

MSXML4 已经很老了。 MSXML6 是最新的。但是,MSXML6 对于小的 XML 文件以外的任何东西都毫无用处。因此,根据您的输入文件大小选择解析器(如果性能很重要)。有免费的库,如 Xerces、RapidXML、pugixml 等,它们的性能好得多

另外,您能否具体说明您在使用 MSXML4 时遇到了哪些困难?

关于c++ - 从 BSTR 中删除 XML 声明的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10983338/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com