为什么我会得到 System.Data.DataRow?而不是数据表(我从 Outlook 中检索了一个表作为 html 正文,然后将其解析为数据表)

问题描述 投票:0回答:1

我从 Outlook 中检索了一个表格作为 html 正文,然后将其解析为数据表,但是当我运行代码时,我得到的只是 System.Data.DataRow

static void Main(string[] args)
{
        var mails = OutlookEmails.ReadMailItems();

        foreach (var mail in mails)
        {
            StringBuilder builder = new StringBuilder();
            builder.Append(mail.EmailBody.ToString());

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(builder.ToString());

            var nodes = doc.DocumentNode.SelectNodes("//table//tr");
            DataTable dataTable = new DataTable();

            var headers = nodes[0]
                .Elements("th")
                .Select(th => th.InnerText.Trim());

            foreach (var header in headers)
            {
                dataTable.Columns.Add(header);
            }

            var rows = nodes.Skip(1).Select(tr => tr
                .Elements("td")
                .Select(td => td.InnerText.Trim())
                .ToArray());

            foreach (var row in rows)
            {
                dataTable.Rows.Add(row);
            }
        
            Console.WriteLine(dataTable.Rows);
            Console.ReadLine();
        }
    }
c# datatable html-agility-pack
1个回答
1
投票

因为你只是打印出对象的类型。如果您想打印数据表中每一行的每一列,则必须指定:

foreach (DataRow row in dataTable.Rows) 
{
    Console.WriteLine();
    foreach (DataColumn col in dataTable.Columns) 
    {
        Console.Write(row[col] + " ");
    }
}

欲了解更多信息:MS DataTable 文档

© www.soinside.com 2019 - 2024. All rights reserved.