1

我有一个包含值的表的 html 文件源,我想将每个值传输到我构建的数据网格视图中。例子 :

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

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

age    firstName    lastName
32     jon          smith  

(我已经用列头建立了一个网格)等等......

我怎样才能将每个 td 中的值“钓鱼”到正确的位置?tnx :)

4

4 回答 4

2

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

..我希望将所说的放入C#代码中没有困难=D

于 2013-02-18T15:53:06.747 回答
1

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

好的,我看到您已经修改了问题。有一种叫做 HTML Agility 包的东西可以解析 HTML 并提取值。虽然我自己没有使用它,但如果您的 HTML 表格是有效的 HTML,它可以节省您将表格代码解析为字符串的时间。

http://htmlagilitypack.codeplex.com/

于 2013-02-18T15:52:48.120 回答
0

肮脏的版本。而不是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
    }
}
于 2013-02-18T16:26:17.430 回答
0

如果你的 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 Agility Pack

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

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

于 2013-02-18T16:26:42.687 回答