如何从本地HTML文件中按指定ID解析table并解决输出全部表格问题
问题原因
代码中XPath语法使用错误:table.SelectNodes("//tr") 里的//是全局定位符,会从整个HTML文档根节点匹配所有<tr>元素,不会限定在当前匹配到的formTbl表格范围内,因此会输出所有表格的内容。
修正方案
1. 基础修复(仅修改错误的XPath)
把table.SelectNodes("//tr")改为table.SelectNodes(".//tr"),开头加.代表从当前选中的表格节点开始向下搜索,就不会拿到其他表格的行。
2. 适配目标表格结构的优化代码
你的目标表格只有2行,第一行存列名、第二行存对应值,无需遍历所有表格,可直接定位目标表格简化逻辑:
var url = @"C:\Users\name\Plocha\web.html"; var doc = new HtmlDocument(); doc.Load(url); // 直接定位ID为formTbl的表格,无需遍历所有表格 HtmlNode targetTable = doc.DocumentNode.SelectSingleNode("//table[@id='formTbl']"); if (targetTable != null) { // 取表格下的所有行 var rows = targetTable.SelectNodes(".//tr"); if (rows.Count >= 2) { // 第一行是列名,第二行是对应值 var colNames = rows[0].SelectNodes(".//td"); var colValues = rows[1].SelectNodes(".//td"); // 逐列输出对应关系 for (int i = 0; i < colNames.Count; i++) { Console.WriteLine($"Column:{colNames[i].InnerText.Trim()} Row:{colValues[i].InnerText.Trim()}"); } } } else { Console.WriteLine("未找到ID为formTbl的表格"); }
内容的提问来源于stack exchange,提问作者Justyn
相关产品推荐
相关产品推荐

