如何在 C# 中使用事件驱动的 SAX(Simple API FOR XML) 解析器,还是使用 System.XML 命名空间更好?

Posted

技术标签:

【中文标题】如何在 C# 中使用事件驱动的 SAX(Simple API FOR XML) 解析器,还是使用 System.XML 命名空间更好?【英文标题】:How to use the event driven SAX(Simple API FOR XML) parser in C# or is it better to use System.XML namespace? 【发布时间】:2011-05-09 00:29:26 【问题描述】:

在 C++ 中,我们可以将 msxml DLL 导入我们的应用程序,然后在应用程序的一个类中实现接口 ISAXContentHandler 的方法。稍后创建一个 ISAXReader 对象并使用这个类的实例调用 contentHandler,我们在其中为事件处理程序接口提供了实现。 同样,我想在 C# 中实现同样的目标。有没有办法在 C# 中做到这一点?我的意思是有什么方法可以在 C# 中进行基于事件的 SAX 解析。 我认为还有一种方法可以帮助我解析 XML 文档并将 XML 信息获取到我的应用程序。 我点击了链接“http://www.codeguru.com/csharp/csharp/cs_data/xml/article.php/c4221

这里使用了 DOM,并且使用了 System.XML 命名空间。 任何人都可以在这方面帮助我,----在 C# 中实现事件驱动的 XML 解析的方法是什么 或者我应该使用 System.XML 命名空间 (DOM)。如果存在 SAX 事件驱动方式请告诉我如何在 C# 中做到这一点

【问题讨论】:

【参考方案1】:

我认为在 .Net 框架中最接近 SAX 阅读器的是 XmlReader 类。它不是基于事件的,但它允许您以类似的方式遍历文档。看这个例子:http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.read.aspx

如果您需要最高性能,那么 XmlReader 是一个不错的选择,但还有其他替代方案可以提供更友好的 api。 XmlDocument 类允许您将 xml 文档视为分层树,而 XDocument 允许您使用 LINQ 解析 xml。您需要哪一种取决于您喜欢哪种型号以及您的要求。

【讨论】:

【参考方案2】:

前段时间我遇到了类似的问题。虽然我无法回答哪个更好,已经实现的 System.XML DOM 或 C# SAX 解析器(这实际上取决于您的应用程序),但我可以告诉您,确实可以在 C# 中实现 SAX 解析器。

事实上,Martin Friedrich 在 CodeProject 中已经完成了这项工作:Towards a Declarative SAX Framework : Part 1 - A Simple SAX-to-C#-Mapping。

【讨论】:

以上是关于如何在 C# 中使用事件驱动的 SAX(Simple API FOR XML) 解析器,还是使用 System.XML 命名空间更好?的主要内容,如果未能解决你的问题,请参考以下文章

python使用SAX解析xml

文件处理xml 文件 SAX解析

XML- SAX解析

jaxp解析器——sax

如何在 2 个独立的 C# 程序之间进行事件驱动编程?

Java高级特性 第14节 解析XML文档 - SAX 技术