如何使用C#的HTML Agility Pack提取<li>标签中的所有列表项
提取HTML列表项的解决方案
嘿,我来帮你搞定这个问题!你已经成功加载了HTML文档,接下来只需要用HtmlAgilityPack的元素选择能力定位到目标列表项,然后按要求格式输出就行啦。
方法一:使用XPath定位(简洁高效)
XPath可以直接精准定位到你需要的所有列表项元素,代码如下:
string source = someSource; var htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(source); // 通过XPath获取所有目标span元素 var listItems = htmlDoc.DocumentNode.SelectNodes("//div[@id='feature-bullets']//span[@class='a-list-item']"); if (listItems != null) { // 遍历并按要求格式输出 for (int i = 0; i < listItems.Count; i++) { // 清理文本前后的多余空格 string cleanedText = listItems[i].InnerText.Trim(); Console.WriteLine($"List value {i + 1} is: {cleanedText}"); } }
方法二:使用LINQ链式查询(直观易读)
如果你更习惯LINQ的写法,也可以用链式调用逐层定位元素:
string source = someSource; var htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(source); // 逐层筛选出目标列表项文本 var listItemTexts = htmlDoc.DocumentNode .Descendants("div") .FirstOrDefault(div => div.GetAttributeValue("id", "") == "feature-bullets")? .Descendants("span") .Where(span => span.GetAttributeValue("class", "") == "a-list-item") .Select(span => span.InnerText.Trim()) .ToList(); if (listItemTexts != null && listItemTexts.Any()) { for (int i = 0; i < listItemTexts.Count; i++) { Console.WriteLine($"List value {i + 1} is: {listItemTexts[i]}"); } }
小提示
- 用
Trim()处理文本是为了去除原HTML中文本前后的多余空格,让输出更干净; - 注意判断
listItems或listItemTexts是否为null,避免空引用异常; - 两种方法都能得到你想要的输出结果,选你觉得顺手的就行~
内容的提问来源于stack exchange,提问作者Josie
相关产品推荐
相关产品推荐

