You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

精通HtmlAgilityPack,如何提取1.htm表格中"Operating system"对应值?

解决HtmlAgilityPack提取表格中"Operating system"对应值的问题

嘿,我来帮你搞定这个提取表格数据的问题!你现在的代码只完成了加载HTML文档的步骤,还没加上关键的查询逻辑——这就是为啥拿不到数据啦。

假设你的HTML表格是两列布局(左边是属性名称,右边是对应值),比如结构大概是这样:

<table>
  <tr>
    <td>Operating system</td>
    <td>Windows 10 Pro</td>
  </tr>
  <!-- 其他行 -->
</table>

那咱们可以用HtmlAgilityPack的XPath或者LINQ查询来定位目标数据,下面是完整的实现代码:

private void simpleButton1_Click(object sender, EventArgs e)
{
    // 创建HtmlDocument实例
    var doc = new HtmlAgilityPack.HtmlDocument();
    // 加载本地HTML文件
    doc.Load(@"D:\(тут путь к файлу)\1.htm");

    // 方法1:用XPath查询(推荐,简洁高效)
    // 找到所有包含"Operating system"的单元格,然后获取它的下一个兄弟单元格内容
    var osValueNode = doc.DocumentNode.SelectSingleNode("//td[text()='Operating system']/following-sibling::td");
    if (osValueNode != null)
    {
        string osValue = osValueNode.InnerText.Trim();
        MessageBox.Show($"操作系统:{osValue}");
    }
    else
    {
        MessageBox.Show("未找到Operating system对应的行");
    }

    // 方法2:用LINQ遍历(如果XPath不生效,换这个试试,兼容性更强)
    // 遍历所有表格行
    foreach (var row in doc.DocumentNode.SelectNodes("//tr"))
    {
        var cells = row.SelectNodes("./td");
        if (cells != null && cells.Count >= 2)
        {
            // 检查第一列的文本是否匹配
            if (cells[0].InnerText.Trim() == "Operating system")
            {
                string osValue = cells[1].InnerText.Trim();
                MessageBox.Show($"操作系统:{osValue}");
                break; // 找到后退出循环
            }
        }
    }
}

注意事项:

  • 如果你的表格里用的是<th>标签而不是<td>,记得把代码里的td改成th
  • 要注意文本的空格和大小写,比如如果HTML里是Operating System(首字母大写S),那查询条件也要对应调整,或者用Contains()来模糊匹配:cells[0].InnerText.Trim().Contains("Operating system")
  • 如果页面里有多个表格,你需要给XPath加上更精确的定位,比如//table[@id='targetTable']//td[text()='Operating system'](假设目标表格有id)

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:39:43