Question

In my current project, I am reading xml file into DataSet using System.IO.Stream.

There are hundred over records of child nodes inside parent node, NewDataSet. I have attached XML schema below:

enter image description here

However, When I do counting of DataSet Tables, it returns only 1 table.

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();
            }

I think that it is only reading the parent node and not able to reach the child nodes. Can anyone please tell me how to solve this problem? Any help will be very much appreciated!

Was it helpful?

Solution

I totally agree with Hamlet, your code works! You shouldn't iterate over the tables you should iterate over the rows in your Table:

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();
            }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top