gpt4 book ai didi

c# - HtmlAgilitypack 枚举所有类

转载 作者:行者123 更新时间:2023-11-27 23:22:59 28 4
gpt4 key购买 nike

一般来说,我经常处理 html,并且总是使用 Regex 来获取结果。不过,每次我寻求帮助时,每个人都建议使用 HTML 解析器,例如 HTMLAgilitypack。

我刚刚试过了,伙计,现在对我来说太多了。这就是我尝试枚举 html 代码跨度的方式

private static string _InetReadEx(string sUrl)
{
try
{
HtmlWeb website = new HtmlWeb();
HtmlDocument htmlDoc = website.Load(sUrl);

var allElementsWithClassFloat = htmlDoc.DocumentNode.SelectNodes("//div[contains(@class,'pid')]");
for (int i = 0; i < allElementsWithClassFloat.Count; i++)
{
Console.WriteLine(allElementsWithClassFloat[i].InnerText);
}

return aRet;
}
catch (Exception ex)
{
throw ex;
}
}

我收到错误Expression must evaluate to a node-set

我已经上传了 HTML 文件 here因为它太大了,无法将其添加到帖子中我需要枚举所有包含“pid”的类。

最佳答案

我想你需要类似的东西

private static List<string> _InetReadEx(string sUrl)    // Returns string list
{
var aRet = new List<string>(); // string list var
try
{
var website = new HtmlAgilityPack.HtmlWeb(); // Init the object
var htmlDoc = website.Load(sUrl); // Load doc from URL

var allElementsWithClassFloat = htmlDoc.DocumentNode.SelectNodes("//*[contains(@class,'pid')]"); // Get all nodes with class value containing pid
if (allElementsWithClassFloat != null) // If nodes found
{
for (int i = 0; i < allElementsWithClassFloat.Count; i++)
{
if (!string.IsNullOrWhiteSpace(allElementsWithClassFloat[i].InnerText) && // if not blank/null
!aRet.Contains(allElementsWithClassFloat[i].InnerText)) // if not already present
{
aRet.Add(allElementsWithClassFloat[i].InnerText); // Add to result
Console.WriteLine(allElementsWithClassFloat[i].InnerText); // Demo line
}
}
}
return aRet;
}
catch (Exception ex)
{
throw ex;
}
}

XPath 是//*[contains(@class,'pid')]:

  • //* - 获取所有元素节点......
  • [包含( - 包含...
  • @class,'pid' - class 属性值中的 pid 子串
  • )] - 包含条件的结尾

关于c# - HtmlAgilitypack 枚举所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40062144/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com