【问题标题】:How to read child node of XML file? [closed]如何读取 XML 文件的子节点? [关闭]
【发布时间】:2013-09-20 04:39:29
【问题描述】:

在我当前的项目中,我正在使用 System.IO.Stream 将 xml 文件读入 DataSet。

父节点NewDataSet内有上百条子节点记录。我在下面附加了 XML 架构:

但是,当我对 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();
            }

我认为它只是读取父节点而无法到达子节点。谁能告诉我如何解决这个问题?任何帮助将不胜感激!

【问题讨论】:

  • 在您的 XML 中似乎最多包含一个表的行而不是许多表。
  • @HamletHakobyan 你是对的。感谢您指出我的问题。

标签: c# xml parent-child xmlreader


【解决方案1】:

我完全同意哈姆雷特,你的代码有效!您不应该遍历表,而应该遍历表中的行:

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

【讨论】:

  • 我的错。这些是表格的行。我在数数据集的表。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多