精通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
相关产品推荐
相关产品推荐

