2009-03-03 83 views
17

.Net框架现在有(至少)四种不同的读取Xml字符串的方法。我已经使用了XmlDocument,XmlReader,XPath和XElement中的每一个,但是在编码或执行过程中哪个最有效?每个人都是为不同的任务而设计的,有什么优点和缺点?解析XML的最有效方法


更新: 使用的XmlReader看似以读取XML,这听起来合理的,我最快捷的方式,但有它的局限性。我想知道XmlDocument和XLinq之间是否存在任何性能差别,用于非顺序访问xml。


更新: 我发现一些职位比较加载XML文档的不同方法。 XmlReader是最快的,XmlDocument和LINQ to XML之间的差异是微不足道的,直到您加载一个具有10,000+节点的文档,其中LINQ to XML出现在前面。

回答

12

三种最常见的方法来读取是:

的XmlDocument 它读取一个树状结构,然后可以使用XPath访问或通过浏览所有节点的整个文件。由于整个XML结构必须加载到内存中,因此它需要大量内存来存放非常大的文件。对于较小的文件使用非常好并且简单(少于几个兆字节)。

XmlReader 快速,但也是一个真正的痛苦,因为它是顺序的。如果你需要回去,你不能,而且XML结构通常很容易出现无序的订单。另外,如果你从一个不结束的XML流中读取数据,这可能是唯一的出路。

XML串行器 这基本上为您做了一切,您提供了模型的根对象,并为您创建和读取XML。然而,你几乎不能控制结构,阅读你的对象的旧版本是一件痛苦的事情。所以这对于坚持不会很好。

XDocument和LINQ to XML 正如Daniel Straight指出的那样。但我不太足以评论。我邀请任何人编辑帖子并添加缺失的信息。


现在写作是另一回事。维护一个XmlDocument和一个XmlWriter是一件很容易使用的事情。

根据我的经验,我会说,最好的组合是使用XmlWriter编写并使用XmlDocument进行读取。

4

最快的领域之一将是XmlTextReader。来自MSDN:

“表示提供对XML数据的快速,非缓存,只进的 访问权限的读取器。”

这里更多:XmlTextReader Class

虽然它实际上取决于问题的决定哪些“法”将是最apropriate使用。如果您只需要读取一次XML文件(例如:读取和缓存某些全局应用设置等),则XmlTextReader就是赢家。但请记住,它是只读阅读器。如果您需要搜索/修改整个XML,那么您应该使用XmlDocument Class

+0

-1:不应该直接使用`XmlTextReader`。使用`XmlReader.Create`来创建一个`XmlReader`。 – 2011-10-08 00:26:55

5

还有XDocument和LINQ to XML,在编程时间方面,我认为这是迄今为止最高效的。

+0

与XmlDocument相比XDocument如何执行? – bstoney 2009-03-03 13:58:54