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