MXXMLWriter 示例移植到 VC++






4.54/5 (12投票s)
2001年4月22日
2分钟阅读

183667

1556
微软的 MXXMLWriter 示例,展示了如何使用 SAX2 和 MXXMLWriter,现在已使用 ATL 和 C++ 移植到 VC++,并添加了一些不错的功能。
引言
XML 简单 API (SAX) 提供了一种替代的、更有效的方式来解析 XML 文件。 MSDN 上有大量关于 DOM 和 SAX API 的信息。
昨晚我在阅读关于如何使用 SAX 和 MXXMLWriter
生成 XML 文件的文档。 但是,唯一的示例是用 VB 编写的,并且在评论区中有人请求一个可用的 C++ 示例。 既然我想我最终必须编写代码来做到这一点,为什么不快速地将示例移植到 VC++,作为我自己的练习并为他人提供服务呢?
项目信息
这是示例,用 C++ 编写,结合了一些轻量级的 ATL(主要是为了包装 Win32 API 调用和智能指针)。 这是构建示例所需的内容
- 编译器:VC++ 6(任何 Service Pack 级别都可以)
- 依赖项:MSXML 3.0 及更高版本(您应该在编译之前安装它),ATL 3.0
- 构建:使用非 Unicode 和 Unicode 配置的调试和发布版本进行了测试(所以我猜它应该可以在 Win9x 上运行?)
一些细节
我花了一些时间使对话框可调整大小,不像 VB 示例那样,如果您使用大文件,您实际上看不到生成的 XML 输出。 否则,一切都应该与 VB 示例非常相似。 如果您想查看实际的调整大小代码(这本身也是一个很好的练习),以下函数包含所有逻辑
CMainDlg::Init()
- 设置CMainDlg::OnSize()
- 实际调整大小
Try File
和 Try Demo
函数与 VB 示例类似,除了设置接口指针并获得正确数据类型的一些小修改。 我建议您下载 VB 示例作为参考。
在 VB 示例中,左侧的编辑框称为“TextSource”,右侧的编辑框称为“TextResult”。 在 VC++ 端口中,我分别将它们称为“Events”和“XML”。
在 CMainDlg::OnTryDemo()
函数中,我需要使用 ISAXAttributes
和 IMXAttributes
指针来引用我创建的 SAXAttributes
对象。 这是因为 addAttribute
和 clear
方法是 IMXAttributes
接口的一部分。
我还包括了原始 VB 示例中包含的测试 XML 文件在压缩文件中。 test1.xml 文件显然缺少“>”,因此当您尝试该文件时会生成错误。 我不确定这是否有意测试错误情况,或者只是一个错字,但至少我在其中包含了一些错误检查,只是为了表明它有效。 :)
结论
感谢 Microsoft 提供了足够简单的 VB 示例,我可以阅读和理解。
这是我的第一篇文章,因此我非常感谢任何反馈。