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文件读取为字符串,然后按字符将其读取为另一个字符串,当您读取>
时,则应读取整个标记(<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;
}
}
(我已经猜到你实际上是如何在这里添加行和单元格的;希望你能自己解决这个问题。)