将xml文件输出值写入数据集

时间:2011-09-09 15:08:58

标签: c# xml dataset linq-to-xml

此代码被编程为显示来自大量xml文件的一些数据值,无论如何要更改它以便将值写入数据集/表?

    static void Main(string[] args)
    {
        string[] fileEntries = Directory.GetFiles(@"c:\Sciclone UAC", "*.cfg*");
        foreach (string fileName in fileEntries)
        {
            XDocument doc = XDocument.Load(fileName);
            var query = from x in doc.Descendants("XAxisCalib")
                        select new
                       {
                            //Max1 = x.Attribute("Max").Value,
                            //Min2 = x.Attribute("Min").Value


                            MaxChild = x.Descendants("Max"),
                            MinChild = x.Descendants("Min")
                        };

            foreach (var x in query)
            {
                foreach (var nextLevel in x.MaxChild)
                {
                    Console.WriteLine("XMax: " + nextLevel.Value);
                }
                foreach (var nextLevel in x.MinChild)
                {
                    Console.WriteLine("XMin: " + nextLevel.Value);
                }
                //Console.WriteLine("XAxisCalib");
            }



            var query2 = from y in doc.Descendants("YAxisCalib")

                         select new
                         {

                             //Max3 = x.Attribute("Max").Value,

                             //Min4 = x.Attribute("Min").Value

                             MaxChild = y.Descendants("Max"),
                             MinChild = y.Descendants("Min")

                         };


            foreach (var y in query2)
            {
                foreach (var nextLevel in y.MaxChild)
                {
                    Console.WriteLine("YMax: " + nextLevel.Value);
                }
                foreach (var nextLevel in y.MinChild)
                {
                    Console.WriteLine("YMin: " + nextLevel.Value);
                }

                //Console.WriteLine("YAxisCalib");



                var query3 = from z in doc.Descendants("ZAxisCalib")

                             select new
                             {

                                 //Max5 = x.Attribute("Max").Value,

                                 //Min6 = x.Attribute("Min").Value

                                 MaxChild = z.Descendants("Max"),
                                 MinChild = z.Descendants("Min")
                             };

                foreach (var z in query3)
                {
                    foreach (var nextLevel in z.MaxChild)
                    {
                        Console.WriteLine("ZMax: " + nextLevel.Value);
                    }
                    foreach (var nextLevel in z.MinChild)
                    {
                        Console.WriteLine("ZMin: " + nextLevel.Value);
                    }

                    //Console.WriteLine("ZAxisCalib");

                }

            }

        }
    }
}

}

1 个答案:

答案 0 :(得分:2)

我不知道我是否遗漏了什么,但是DataSet.ReadXml方法怎么样?:

DataSet ds = new DataSet();
ds.ReadXml("myxmlfile.xml");              

ReadXml()方法有一个传递XmlReadMode的重载,它提供了处理模式的各种选项。

在您的情况下,假设您想要将每个XML文件读入其自己的DataSet,您可以执行以下操作:

string[] fileEntries = Directory.GetFiles(@"c:\Sciclone UAC", "*.cfg*"); 
foreach (string fileName in fileEntries) 
{ 
    DataSet ds = new DataSet();
    ds.ReadXml(fileName, XmlReadMode.InferSchema);
}

要将XML文件读入同一个DataSet,您可以执行以下操作:

DataSet masterSet = new DataSet();

string[] fileEntries = Directory.GetFiles(@"c:\Sciclone UAC", "*.cfg*"); 
foreach (string fileName in fileEntries) 
{ 
    //initialize a new dataset and read the xml into it
    DataSet tempSet = new DataSet();
    tempSet.ReadXml(fileName, XmlReadMode.InferSchema);

    //merge the tables from the temporary datset into the master dataset
    foreach (DataTable table in tempSet.Tables)
        masterSet.Merge(table);        
}

这是使用可枚举的LINQ方法执行相同操作的另一种方法:

DataSet masterSet = new DataSet();

string[] fileEntries = Directory.GetFiles(@"c:\Sciclone UAC", "*.cfg*"); 
foreach (string fileName in fileEntries) 
{ 
    //initialize a new dataset and read the xml into it
    DataSet tempSet = new DataSet();
    tempSet.ReadXml(fileName, XmlReadMode.InferSchema);

    //merge the tables from the temporary datset into the master dataset
    tempSet.Tables.Cast<DataTable>().ToList().ForEach(table => masterSet.Merge(table));  
}

其中一个XmlReadMode枚举绝对适合您的需求。

  • 自动
  • 的DiffGram
  • 片段
  • IgnoreSchema
  • 则InferSchema
  • InferTypedSchema
  • ReadSchema

这是MSDN上的一个链接,解释了不同的XmlReadMode枚举的作用:
http://msdn.microsoft.com/en-us/library/system.data.xmlreadmode.aspx

相关问题