2013-09-20 2 views
0

В моем текущем проекте я читаю xml-файл в DataSet, используя System.IO.Stream.Как читать дочерний узел XML-файла?

Существует сто над записями дочерних узлов внутри родительского узла, NewDataSet. Я приложил XML-схема ниже:

enter image description here

Однако, когда я подсчетом DataSet таблицы, он возвращает только 1 таблицу.

FileStream fileStream = new FileStream(sourceFilePath, FileMode.Open); 

      try 
      { 
       dataSet.ReadXml(fileStream); 
       if (dataSet.Tables.Count> 0) 
       { 
        //dt = dataSet.Tables[0]; 
        for (int i = 0; i < dataSet.Tables.Count; i++) 
        { 
         dataTable = dataSet.Tables[i]; 

         if (dataTable != null) 
         { 
          SalesHeader salesHeader = new SalesHeader(); 
          salesHeader.OutletCode = dataTable.Rows[i]["OutletCode"].ToString(); 
          salesHeader.TransactionNo = dataTable.Rows[i]["TransactionNo"].ToString(); 
          salesHeader.TransactionDate = Convert.ToDateTime(dataTable.Rows[i]["TransactionDate"]); 
          salesHeader.ShiftNo = Convert.ToInt16(dataTable.Rows[i]["ShiftNo"]); 
          salesHeader.TotalAmount = Convert.ToDecimal(dataTable.Rows[i]["TotalAmount"]); 
          salesHeader.TenderAmount = Convert.ToDecimal(dataTable.Rows[i]["TenderAmount"]); 
          salesHeader.ChangeAmount = Convert.ToDecimal(dataTable.Rows[i]["ChangeAmount"]); 
          salesHeader.TransactionStatus = Convert.ToInt16(dataTable.Rows[i]["TransactionStatus"]); 
          salesHeader.BusinessDate = Convert.ToDateTime(dataTable.Rows[i]["BusinessDate"]); 
         } 
        }       
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
      finally 
      { 
       fileStream.Close(); 
      } 

Я думаю, что он только читает родительский узел и не может достичь дочерних узлов. Может ли кто-нибудь рассказать мне, как решить эту проблему? Любая помощь будет очень оценена!

+3

Самое похоже, что в вашем XML содержатся строки таблицы, а не многие таблицы. –

+0

@HamletHakobyan Вы правы. Спасибо, что указал на мою проблему. –

ответ

2

Я полностью согласен с Гамлетом, ваш код работает! Вы не должны перебирать таблицы, которые вы должны перебирать по строкам в таблице.

FileStream fileStream = new FileStream(sourceFilePath, FileMode.Open); 

      try 
      { 
       List<SalesHeader> result = new List<SalesHeader>(); 
       dataSet.ReadXml(fileStream); 
       if (dataSet.Tables.Count> 0) 
       { 
        dataTable = dataSet.Tables[0]; 
        if (dataTable != null) 
        { 

         for (int i = 0; i < dataTable.Rows.Count; i++) 
         { 
          SalesHeader salesHeader = new SalesHeader(); 
          salesHeader.OutletCode = dataTable.Rows[i]["OutletCode"].ToString(); 
          salesHeader.TransactionNo = dataTable.Rows[i]["TransactionNo"].ToString(); 
          salesHeader.TransactionDate = Convert.ToDateTime(dataTable.Rows[i]["TransactionDate"]); 
          salesHeader.ShiftNo = Convert.ToInt16(dataTable.Rows[i]["ShiftNo"]); 
          salesHeader.TotalAmount = Convert.ToDecimal(dataTable.Rows[i]["TotalAmount"]); 
          salesHeader.TenderAmount = Convert.ToDecimal(dataTable.Rows[i]["TenderAmount"]); 
          salesHeader.ChangeAmount = Convert.ToDecimal(dataTable.Rows[i]["ChangeAmount"]); 
          salesHeader.TransactionStatus = Convert.ToInt16(dataTable.Rows[i]["TransactionStatus"]); 
          salesHeader.BusinessDate = Convert.ToDateTime(dataTable.Rows[i]["BusinessDate"]); 
          result.Add(saleshaeder); 
         } 
        }       
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
      finally 
      { 
       fileStream.Close(); 
      } 
+0

Мой плохой. Это строки таблицы. Я подсчитывал таблицы DataSet. Спасибо за вашу помощь. –

Смежные вопросы