我有一个包含值的表的 html 文件源,我想将每个值传输到我构建的数据网格视图中。例子 :
<tr><td>32</td><td>jon</td><td>smith</td></tr>
在我的数据网格视图中我想要:
age firstName lastName
32 jon smith
(我已经用列头建立了一个网格)等等......
我怎样才能将每个 td 中的值“钓鱼”到正确的位置?tnx :)
强大的解决方案 - 通过解析。将html文件读入一个字符串,然后逐个字符读入另一个字符串,当你读到时>
,你应该有一个完整的标签read( <tr>
,,或) </tr>
,检查哪个,如果是,则设置X=0,Y++,如果它是,然后是 X++,在读取标签后 - 明文,重复,如果你阅读并且已经读取了一些数据,那么这个数据是一个文本,应该放在数据网格中的 [X,Y] 位置(你可以初始化解析后,只需找到最大 X 即可知道列数)...<td>
</td>
</tr>
</td>
<
..我希望将所说的放入C#代码中没有困难=D
这些值是否已经在某种 DataTable 或 DataSet 中?GridView 本身呈现为表格,所以您是否试图做一些不必要的事情?
好的,我看到您已经修改了问题。有一种叫做 HTML Agility 包的东西可以解析 HTML 并提取值。虽然我自己没有使用它,但如果您的 HTML 表格是有效的 HTML,它可以节省您将表格代码解析为字符串的时间。
肮脏的版本。而不是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 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;
}
}
(我已经猜到你是如何在这里实际添加行和单元格的;希望你能自己解决这个问题。)