如何使用Html Agility Pack解析表格中指定行的下一行?
嘿,我来帮你搞定用Html Agility Pack获取指定行下一行的需求!
需求回顾
你有这样的HTML表格结构,想要解析出id="data1"那一行的下一行:
<table> <thead> <tr> <th>Name</th> <th>Department</th> <th>Gender</th> </tr> </thead> <tbody> <tr id="data1"> </tr> <tr> </tr> <!-- 这就是我们要获取的目标行 --> </tbody> </table>
解决方案代码
Html Agility Pack提供了很方便的节点定位和遍历方法,直接上可运行的代码示例:
// 初始化HtmlDocument并加载你的HTML内容 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); // 这里替换成你的HTML来源——可以是字符串、文件或者网络请求返回的内容 doc.LoadHtml(yourHtmlContent); // 第一步:定位到id为data1的行 HtmlNode targetRow = doc.SelectSingleNode("//tr[@id='data1']"); if (targetRow != null) { // 第二步:获取下一个元素节点(用NextElementSibling跳过空白/换行节点) HtmlNode nextRow = targetRow.NextElementSibling; if (nextRow != null) { // 这里可以根据需求处理行内容,比如输出整行HTML Console.WriteLine(nextRow.OuterHtml); // 要是想提取单元格文本,就遍历td节点 foreach (HtmlNode td in nextRow.SelectNodes(".//td") ?? Enumerable.Empty<HtmlNode>()) { Console.WriteLine($"单元格内容:{td.InnerText.Trim()}"); } } else { Console.WriteLine("id为data1的行后面没有其他行啦!"); } } else { Console.WriteLine("找不到id为data1的行哦,请检查HTML结构"); }
关键细节提示
- 用
SelectSingleNode("//tr[@id='data1']")通过XPath精准定位目标行,比遍历节点效率更高 - 一定要用
NextElementSibling而不是NextSibling!因为HTML里的换行、空格会被当作文本节点,NextSibling可能会拿到这些无用节点,而NextElementSibling只会返回下一个元素节点(也就是我们要的tr) - 加上null判断很重要,避免找不到节点时抛出空引用异常,让代码更健壮
内容的提问来源于stack exchange,提问作者Pankash Mann
相关产品推荐
相关产品推荐

