读取大型xml文件并将其数据提取到C#.Net项目中的表单应用程序中

时间:2010-07-23 09:39:41

标签: c# xml database

我想读取一个xml文件数据并从中提取信息,以便以C#.Net vs2008环境的形式显示。 我无法将此数据读入内存中的列表,但我希望从项目中获得可以在另一台计算机系统中运行的.exe文件。所以我想,我不能使用数据库来保存和检索数据! 请帮我解决我的问题!

3 个答案:

答案 0 :(得分:3)

使用System.Xml.XmlReader读取XML文件。这是一个仅向前阅读器,一次只加载一些XML。

将此与生成IEnumerable的迭代器方法结合使用,例如此示例,其中MyXmlData是表示XML文件中保存的内容的类以及表单可以使用的类:

public IEnumerable<MyXmlData> QueryFile(String xmlFile)
{
    using (var reader = XmlReader.Create(xmlFile))
    {
        // These are the variables you want to read for each 'object' in the
        // xml file.
        var prop1 = String.Empty;
        var prop2 = 0;
        var prop3 = DateTime.Today;

        while (reader.Read())
        {
            // Here you'll have to read an xml node at a time.
            // As you read, assign appropriate values to the variables
            // declared above.

            if (/* Have we finished reading an item? */)
            {
                // Once you've completed reading xml representing a single
                // MyXmlData object, return it using yield return.
                yield return new MyXmlData(prop1, prop2, prop3);
            }
        }
    }
}

从该方法返回的值是一系列MyXmlData对象,其中每个对象都会在读取文件时按需创建,一次一个。这将大大减少大型XML文件的内存需求。

然后,您可以使用Linq函数查询MyXmlData对象。例如,您可以使用Take和Skip方法模拟分页。

// Third page - 50 objects per page.
QueryFile(@"x.xml").Skip(100).Take(50);

答案 1 :(得分:0)

最近,microsoft在WCF中提供了一个synidcation类。你可以用它来完成这个任务

答案 2 :(得分:0)