c# - 如何按特定 ID 解析 html 表(来自文件)
问题描述
我正在尝试从下载的 html 中获取特定的表(通过 id)并解析它我尝试了几种方法,我的最后一个代码是
var url = @"C:\Users\name\Plocha\web.html";
var doc = new HtmlDocument();
doc.Load(url);
string data = "";
int i = 2;
foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table"))
{
Console.WriteLine($"Found: {table.Id}");
if (table.Id == "formTbl")
{
foreach (HtmlNode row in table.SelectNodes("//tr"))
{
foreach (HtmlNode cell in row.SelectNodes("td"))
{
if (i == 1)
{
data += $"Column:{cell.InnerText}";
i = 2;
}
else if (i == 2)
{
data += $"Row: {cell.InnerText}";
Console.WriteLine(data);
data = "";
i = 1;
}
}
}
}
else
{
Console.WriteLine("Not what we want");
}
}
问题是它会从网页打印所有表格,即使我已指定仅在 id = formTbl 时才继续。
解决方案
SelectNodes()
接受XPath
查询。这里有一些有用的例子。与您的案例相关的一个特定问题是://book
- 选择所有书籍元素,无论它们在文档中的什么位置。
这意味着"//tr"
您应该寻找"tr"
是否要尊重范围,而不是使用(搜索整个文档)。
您甚至可以使用 xpath 进行id
搜索并选择<tr>
下面的内容,使用单个查询:
foreach (var row in doc.DocumentNode.SelectNodes("//table[@id='formTbl']/tr"))
{
// ...do <tr> stuff
foreach (var cell in row.SelectNodes("td"))
{
// ... do <td> stuff
}
}
推荐阅读
- javascript - javascript中的正则表达式无法按预期工作
- node.js - 表单提交什么都不发送/req.file 在后端未定义
- javascript - 无论多深,如何将道具从父样式组件传递到其子样式组件
- javascript - 是否可以在 React Native(iOS 和 Android)中使用 WebRTC 共享特定的视图/组件?
- html - 页脚未在页面上正确显示
- here-api - HERE 地理编码 API - 在本地数据库中存储位置地理编码
- python - 通过 BAT 脚本 Ru python 脚本
- git - 我如何应用从电子邮件中获得的补丁,但一次更改一个?
- flags - 关于我的 C 盘中缺少 Windows 标志图标
- tensorflow - Tensorflow RNN LSTM 输出解释