当前位置:  开发笔记 > 编程语言 > 正文

SAX vs XmlTextReader - C#中的SAX

如何解决《SAXvsXmlTextReader-C#中的SAX》经验,为你挑选了4个好方法。

我正在尝试阅读一个大型的XML文档,我想以块XmlDocument的形式将整个文件读入内存.我知道我可以XmlTextReader这样做,但我想知道是否有人使用SAX for .NET?我知道Java开发人员发誓它,我想知道是否值得尝试一下,如果有的话,使用它有什么好处.我正在寻找细节.



1> EnocNRoll - ..:

如果您只是想快速完成工作,那么XmlTextReader就是为此目的而存在的(在.NET中).

如果你想学习一个事实上的标准(并且可以在其他编程语言中使用),这个标准是稳定的,并且会强制你进行非常有效和优雅的编码,但这也非常灵活,那么请研究SAX.但是,除非您要创建高度深奥的XML解析器,否则不要浪费您的时间.相反,寻找适合您特定平台的下一代解析器(如XmlTextReader)的解析器.

SAX Resources
SAX最初是为Java编写的,您可以在这里找到原始开源项目,该项目已经稳定了几年,如下所示:http: //sax.sourceforge.net/

这里有一个相同项目的C#端口(HTML文档作为源代码下载的一部分); 它也很稳定:http: //saxdotnet.sourceforge.net/

如果你不喜欢C#实现,你总是可以使用MSXML3或更高版本通过COMInterop引用COM DLL:http://msdn.microsoft.com/en-us/library/ms994343.aspx

来自Java世界的文章,但可能说明了使用这种方法需要成功的概念(可能还有可下载的Java源代码可能很有用,可能很容易转换为C#):

输出大型XML文档,第1部分(http://www.ibm.com/developerworks/xml/library/x-tipbigdoc.html)

输出大型XML文档,第2部分(http://www.ibm.com/developerworks/xml/library/x-tipbigdoc2.html)

使用SAX过滤器来操作数据(http://www.ibm.com/developerworks/xml/library/x-tipsaxfilter/)

这将是一个繁琐的实施.在我之前的.NET时代,我只使用过SAX,但它需要一些非常先进的编码技术.在这一点上,这不值得麻烦.

混合解析器的有趣概念
该线程描述了一个混合解析器,它使用.NET XmlTextReader实现一个解析器,它提供了DOM和SAX优点的组合......
http://bytes.com/groups/net-xml/178403- XmlTextReader的抗DOM



2> Craig Trader..:

如果您正在谈论SAX for .NET,则该项目似乎不会被维护.最后一个版本是2年多前发布的.也许他们在最后一个版本中得到了完美,但我不会赌它.作者Karl Waclawek似乎已经从网上消失了.

至于Java下的SAX?你打赌,这很棒.遗憾的是,SAX从未作为标准开发,因此所有非Java端口都根据自己的需要调整了Java API.虽然DOM是一个相当糟糕的API,但它具有针对多种语言和环境而设计的优势,因此很容易在Java,C#,JavaScript,C等中实现.



3> GregK..:

我相信使用SAX没有任何好处,至少有两个原因:

    SAX是一种"推送"模型,而XmlReader是一种具有许多优点的拉解析器.

    依赖于第三方库而不是使用标准.NET API.



4> Brett Ryan..:

就个人而言,我更喜欢SAX模型,因为XmlReader有一些非常烦人的陷阱,可能会导致代码中的错误,可能导致代码跳过元素.大多数代码都是围绕一段时间(rdr.Read())模型构建的,但是如果你在该循环中有任何"ReadString"或"ReadInnerXml()",你会发现自己在下一次迭代中跳过元素.

由于SAX是基于事件的,因此您将无法执行任何会导致解析器提前搜索的操作.

我个人的感觉是,微软已经发明了XmlReader在推/拉模型的解释方面更好的概念,但我并没有真正购买它.所以微软认为你不需要用XmlReader创建一个状态机,这对我来说没有意义,但无论如何,这只是我的看法.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有