循环遍历 元素并定义行/列
本文关键字:定义 元素 遍历 td 循环 | 更新日期: 2023-09-27 18:30:54
我有一个HTML <td>
元素的HtmlNodeCollection,这是我使用HTMLAgilityPack从表中收集的。通常,我只会选择表中的<tr>
元素并遍历<td>
元素,但不幸的是,<tr>
开始标记是通过 JavaScript 生成的,而不是从服务器呈现的。我无法控制 HTML 的呈现方式。因此,我求助于从这个 XPATH 查询中获取 HtmlNodeCollection:
HtmlNode table = htmlDoc.DocumentNode.SelectSingleNode("//table[@width='100%' and @cellpadding='1' and @cellspacing='1' and @border='0']");
HtmlNodeCollection tds = table.SelectNodes(".//td[@align and string-length(@width)=0]"); // only select td elements that have the align attribute and don't have a width attribute
在表中,有六列和任意数量的行。我想处理每一行并将列解析为中间数据结构。我有这个代码来获取每个"行"和"列",但它不太正确:
int cols = 6; // six columns
int rows = tds.Count / cols;
// loop through the rows
for (int row = 1; row <= rows; row++)
{
for (int col = 0; col < cols; col++)
{
HtmlNode td = tds[col * row]; // get the associated td element from the column index * row index
MessageBox.Show(td.InnerHtml + "'n" + td.InnerText);
}
}
我从第 1 行而不是第 0 行开始,以行计数结束,因为我不想将零乘以六次。我试图将其视为矩阵,但我无法定义一行何时结束,下一行何时开始。您对如何正确遍历所有行和列有什么建议吗?
在纸上画出网格后,我很清楚我错过了什么。我需要将列索引添加到列数乘以当前行,如下所示:
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < cols; col++)
{
HtmlNode td = tds[col + cols * row]; // get the associated td element from the column index * row index
MessageBox.Show(td.InnerHtml + "'n" + td.InnerText);
}
}
相关文章:
- 你能帮我用元素收藏使我的自定义部分工作吗?
- 使用配置元素集合 c# 实现自定义节
- 如何从用户定义类列表中删除元素
- 序列化定义开放元素的可观察集合
- 如何创建自定义类型以始终表示具有一定数量的元素的某些基本类型的数组
- 自定义 XmlSerializer 问题,列表中<> 中的空元素
- 具有级联到集合中的子元素的自定义控件
- 通过自定义媒体传输控件中的自定义按钮控制媒体元素
- 如何在 WPF 中定义程序生成的 Canvas 的 Ellipse 元素的 MouseLeftButtonDown 的事
- 带有自定义配置部分的配置文件中无法识别的元素“项目”
- 通过自定义属性访问元素
- 无法更新实体集,因为它具有定义查询,并且元素中不存在支持当前操作的元素
- C# 中具有自定义集合的元素指标
- 定义和设置具有单个元素的数组属性
- 某些元素的自定义工具提示模板
- c# xml序列化自定义元素名称
- 如何通过两个属性定义元素
- 编程创建网格与自定义元素
- 使用SyndicationFeed从xml中检索自定义元素值
- Wpf xamlreader加载带有自定义元素的xaml
本文关键字:定义 元素 遍历 td 循环 | 更新日期: 2023-09-27 18:30:54
我有一个HTML <td>
元素的HtmlNodeCollection,这是我使用HTMLAgilityPack从表中收集的。通常,我只会选择表中的<tr>
元素并遍历<td>
元素,但不幸的是,<tr>
开始标记是通过 JavaScript 生成的,而不是从服务器呈现的。我无法控制 HTML 的呈现方式。因此,我求助于从这个 XPATH 查询中获取 HtmlNodeCollection:
HtmlNode table = htmlDoc.DocumentNode.SelectSingleNode("//table[@width='100%' and @cellpadding='1' and @cellspacing='1' and @border='0']");
HtmlNodeCollection tds = table.SelectNodes(".//td[@align and string-length(@width)=0]"); // only select td elements that have the align attribute and don't have a width attribute
在表中,有六列和任意数量的行。我想处理每一行并将列解析为中间数据结构。我有这个代码来获取每个"行"和"列",但它不太正确:
int cols = 6; // six columns
int rows = tds.Count / cols;
// loop through the rows
for (int row = 1; row <= rows; row++)
{
for (int col = 0; col < cols; col++)
{
HtmlNode td = tds[col * row]; // get the associated td element from the column index * row index
MessageBox.Show(td.InnerHtml + "'n" + td.InnerText);
}
}
我从第 1 行而不是第 0 行开始,以行计数结束,因为我不想将零乘以六次。我试图将其视为矩阵,但我无法定义一行何时结束,下一行何时开始。您对如何正确遍历所有行和列有什么建议吗?
在纸上画出网格后,我很清楚我错过了什么。我需要将列索引添加到列数乘以当前行,如下所示:
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < cols; col++)
{
HtmlNode td = tds[col + cols * row]; // get the associated td element from the column index * row index
MessageBox.Show(td.InnerHtml + "'n" + td.InnerText);
}
}
相关文章:
- 你能帮我用元素收藏使我的自定义部分工作吗?
- 使用配置元素集合 c# 实现自定义节
- 如何从用户定义类列表中删除元素
- 序列化定义开放元素的可观察集合
- 如何创建自定义类型以始终表示具有一定数量的元素的某些基本类型的数组
- 自定义 XmlSerializer 问题,列表中<> 中的空元素
- 具有级联到集合中的子元素的自定义控件
- 通过自定义媒体传输控件中的自定义按钮控制媒体元素
- 如何在 WPF 中定义程序生成的 Canvas 的 Ellipse 元素的 MouseLeftButtonDown 的事
- 带有自定义配置部分的配置文件中无法识别的元素“项目”
- 通过自定义属性访问元素
- 无法更新实体集,因为它具有定义查询,并且元素中不存在支持当前操作的元素
- C# 中具有自定义集合的元素指标
- 定义和设置具有单个元素的数组属性
- 某些元素的自定义工具提示模板
- c# xml序列化自定义元素名称
- 如何通过两个属性定义元素
- 编程创建网格与自定义元素
- 使用SyndicationFeed从xml中检索自定义元素值
- Wpf xamlreader加载带有自定义元素的xaml