我正在编写一个C#/ VB程序,用于根据XML中收到的信息报告数据。
我的情况是我每月收到许多XML(大约100-200) - 每个大小从10mb到350mb不等。对于这些XML中的每一个,我只需要一小部分数据(少于任何一个文件的整数数据的5%),以便生成必要的报告。
此外,该数据子集将始终保存在同一个键结构中(它可能存在于多个键中,也可能存在于不同的级别,但它始终存在于相同的键名中/包含它的键将总是拥有相同的属性,例如" name"等等)
所以,我目前关于如何做到这一点的想法是:
我的主要问题是什么是将数据删除的最佳方法? 我最熟悉XPath,但是对于200MB大小的多个文件,我担心在整个文件中加载性能问题。
我见过/研究的其他事情是:
老实说,我不知道标准是什么,因为大量的XML和文件大小的差异很大,而且我不熟悉其他任何方法 - 例如,例如,直接将XML链接到SQL Server /使用ADO查询XML - 因此,不知道它们可能带来的好处/缺点。
如果你们中任何一个人处于类似情况,我真的会欣赏正确方向的任何指针/至少验证我的方法不是最差的一个在那里:)
感谢!!!
答案 0 :(得分:6)
至于内存消耗和性能问题,.NET XML API的一个很好的特性是你可以将XmlReader与XPathDocument或XmlDocument或XElement结合起来,只是选择性地将部分文档读入内存,然后使用XPath或LINQ。到该部分可用的XML功能。 LINQ to XML有http://msdn.microsoft.com/en-us/library/system.xml.linq.xnode.readfrom%28v=vs.110%29.aspx这样做,DOM / XmlDocument有http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.readnode%28v=vs.110%29.aspx。因此,根据您的XML结构,您可以使用XmlReader快速读取XML,而不会消耗太多内存,然后,当您拥有您感兴趣的元素时,可以将其读入{{1然后将LINQ应用于XML和/或XPath以读取详细信息(LINQ to XML)或XElement
(DOM)。