html表转换为数据网格

本文关键字:数据网 网格 数据 转换 html | 更新日期: 2023-09-27 17:59:49

我有一个html文件源,其中有一个保存值的表,我想将每个值转移到我构建的数据网格视图中。示例:

<tr><td>32</td><td>jon</td><td>smith</td></tr>  

在我的数据网格视图中,我想要:

age    firstName    lastName
32     jon          smith  

(我已经准备好用柱头构建网格了)等等…

如何将每个td的值"钓鱼"到正确的位置?tnx:)

html表转换为数据网格

强大的解决方案-通过解析。将html文件读取为字符串,然后按字符将其读取为另一个字符串,当您读取>时,则应读取整个标记(<tr></tr><td></td>),检查哪一个,如果是</tr>,则设置X=0、Y++,如果是</td>,则设置X++,读取标记-明文后,重复,如果您读取了<并且已经读取了一些数据,那么这个数据是一个文本,应该放在数据网格中的[X,Y]位置(解析后可以初始化,只需找到最大X即可知道列数)。。。

我希望将上述内容放入C#代码=D

中不会有任何困难

这些值是否已经在某种类型的DataTable或DataSet中?GridView本身呈现为一个表,所以你是否试图做一些不必要的事情?

好吧,我看你已经修正了这个问题。有一种叫做HTML敏捷包的东西可以解析HTML并提取值。虽然我自己没有使用它,但如果您的HTML表是有效的HTML,它可以将表代码解析为字符串。

http://htmlagilitypack.codeplex.com/

脏版本。您可以生成自己的数据源,而不是List<IList>。小心格式错误的HTML:

class Program {
    static Regex cell = new Regex("<td>(.+?)</td>", RegexOptions.IgnoreCase);
    static string htmlTable = "<tr><td>32</td><td>41</td></tr><tr><td>123123</td><td>123123123</td></tr>";
    static void Main(string[] args) {
        var table = new List<IList<string>>(); //list of lists, kind of data table
        foreach (var rowString in htmlTable.Split(new [] { "</tr>" }, StringSplitOptions.RemoveEmptyEntries)) //split into rows
            table.Add(GetRowValues(rowString)); //get and add row values
    }
    static IList<string> GetRowValues(string rowString) {
        return new List<string>(cell.Matches(rowString).Cast<Match>().Select(m => m.Groups[1].Value)); //extract cells values by regex
    }
}

如果HTML真的如此简单,行或单元格上没有属性,内容中没有有趣的字符,那么正则表达式就是一个快速而肮脏的解决方案:

string html = "<table><tr><td>32</td><td>jon</td><td>smith</td></tr></table>";
string pattern = "<tr>(?:<td>(.*?)</td>)*?</tr>";
foreach (Match m in Regex.Matches(html, pattern, RegexOptions.IgnoreCase))
{
    // Add row
    var row = grid.AddRow();
    foreach (Capture c in m.Groups[1].Captures)
    {
        // Add cell
        var cell = row.AddCell();
        cell.Contents = c.Value;
    }
}

如果你的HTML不那么简单,请使用HTML敏捷包:

string html = "<table><tr><td>32</td><td>jon</td><td>smith</td></tr></table>";
var table = new HtmlDocument();
table.LoadHtml(html);
foreach (var tr in table.DocumentNode.Descendants("tr"))
{
    // Add row
    var row = grid.AddRow();
    foreach (var td in tr.Descendants("td"))
    {
        var cell = row.AddCell();
        cell.Contents = td.InnerText;
    }
}

(我已经猜到你实际上是如何在这里添加行和单元格的;希望你能自己解决这个问题。)