Записать выходные значения XML-файла в набор данных - PullRequest
0 голосов
/ 09 сентября 2011

Этот код запрограммирован для отображения некоторых значений данных из множества 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 Ответ

2 голосов
/ 09 сентября 2011

Не знаю, что я что-то упустил, но как насчет метода 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

...