2

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

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

4

1 回答 1

0

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

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

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

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

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

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

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

于 2012-06-11T22:06:18.513 回答