首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlTextReader与XDocument

XmlTextReader与XDocument
EN

Stack Overflow用户
提问于 2011-11-11 23:55:18
回答 2查看 8.8K关注 0票数 21

我可以在.NET中解析XML,现在我至少可以在XmlTextReaderXDocument之间进行选择。这两个解析器(或框架中包含的任何其他XML解析器)之间有什么比较吗?

也许这可以帮助我在不深入尝试这两种方法的情况下做出决定。

XML文件预计会相当小,与易用性相比,速度和内存使用是一个小问题。:-)

(我将在C#和/或IronPython中使用它们。)

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-11 23:57:32

如果您乐于将所有内容读取到内存中,那么可以使用XDocument。这会让你的生活更轻松。LINQ to XML是一个可爱的API。

基本上,如果需要以流方式处理大型XmlReader文件,请使用XmlTextReader。这是一个痛苦得多的API,但它允许流(即只在需要的时候处理数据,所以你可以处理一个巨大的文档,并且一次只有少量的内存)。

然而,有一种混合的方法-如果您有一个由小元素组成的大型文档,您可以从位于元素开头的XmlReader创建一个XElement,使用LINQ to XML处理该元素,然后将该XmlReader移到下一个元素上并重新开始。

票数 42
EN

Stack Overflow用户

发布于 2015-08-19 17:39:52

XmlTextReader有点过时了,请不要使用它。

  1. 来自XmlTeam的msdn博客

Effective Xml Part 1: Choose the right API

避免使用XmlTextReader。它包含相当多的错误,如果不破坏已经在使用它的现有应用程序,就无法修复这些错误。

The world has moved on, have you? Xml APIs you should avoid using.

过时的API很容易,因为编译器可以帮助识别它们,但还有两个API您应该避免使用-即XmlTextReaderXmlTextWriter。我们在这些类中发现了许多错误,如果不破坏现有的应用程序,我们就无法修复这些错误。最简单的方法是弃用这些类,并要求人们使用替代API。不幸的是,这两个类不能被标记为过时,因为它们是ECMA-335 (公共语言基础设施)标准(http://www.ecma-international.org/publications/standards/Ecma-335.htm)的一部分--伴随的CLILibrary.xml文件是分区IV的一部分)。

好消息是,即使这些类没有被弃用,但在.NET框架中已经有了用于这些类的替代API,并且迁移到它们相对容易。首先,有必要找到使用XmlTextReaderXmlTextWriter的位置(不幸的是,这是一个手动步骤)。现在,所有出现的XmlTextReader都应该替换为XmlReader,所有出现的XmlTextWriter都应该替换为XmlWriter (请注意,XmlTextReader派生自XmlReaderXmlTextWriter派生自XmlWriter,因此应用程序可能已经将它们用作形式参数)。最后一步是改变XmlReader/XmlWriter对象的实例化方式--不是直接创建读取器/写入器,而是必须使用XmlReaderXmlWriter API上都存在的静态工厂方法.Create()

Visual Studio中的

  1. Furthermore,智能感知没有在System.Xml命名空间下列出XmlTextReader。类的定义如下:

EditorBrowsable(EditorBrowsableState.Never)公共类XmlTextReader : XmlReader、IXmlLineInfo、IXmlNamespaceResolver

根据传递的设置,XmlReader.Create工厂方法返回抽象类XmlReader的其他内部实现。

对于只进的流式API (即不会将整个内容加载到内存中),可以通过XmlReader.Create方法使用XmlReader

要获得更容易使用的API,请转到XDocument (又名LINQ to XML )。了解XDocumentXmlDocument herehere的对比。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8096564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档