【问题标题】:Best way to remove XML declaration from BSTR从 BSTR 中删除 XML 声明的最佳方法
【发布时间】:2012-06-14 13:10:32
【问题描述】:

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

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

【问题讨论】:

  • 你能在问题中添加一些代码来说明问题吗?究竟是什么问题?现在什么是“脆弱”?
  • 问题更新了更多信息。

标签: c++ visual-c++ atl msxml msxml4


【解决方案1】:

查找 XML 规范,尤其是 prolog 的语法:

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

[23] XMLDecl ::= ''

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多