对于机器人和C#来说是相当新的。我正在尝试输出所有与//a[@class='featuredBox
匹配的内部链接文本,但它只输出数据的第一位。
实际上,当我调试时,它确实附加了很多值,所以我对为什么不输出全部值感到困惑?
protected void Page_Load(object sender, EventArgs e)
{
HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("https://www.jasminedirectory.com/computers/companies/");
var headingNames = doc.DocumentNode.SelectNodes("//a[@class='featuredBox']").ToList();
foreach (var item in headingNames)
{
botOutput.Text = item.InnerText + "</br>";
}
}
任何帮助将不胜感激。
答案 0 :(得分:3)
尝试在+
之前添加=
。目前看来,您只是在每个循环上覆盖Text
属性,听起来好像您想附加每个匹配项。
protected void Page_Load(object sender, EventArgs e)
{
HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("https://www.jasminedirectory.com/computers/companies/");
var headingNames = doc.DocumentNode.SelectNodes("//a[@class='featuredBox']").ToList();
foreach (var item in headingNames)
{
botOutput.Text += item.InnerText + "</br>";
}
}
替代方法:
protected void Page_Load(object sender, EventArgs e)
{
HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("https://www.jasminedirectory.com/computers/companies/");
var headingNames = doc.DocumentNode.SelectNodes("//a[@class='featuredBox']").ToList();
botOutput = headingNames.Select(name => name.InnerText).Aggregate((current, next) => $"{current}</br>{next}") + "</br>";
}
答案 1 :(得分:2)
您正在不断替换(而不是追加)。改为这样做:
foreach (var item in headingNames)
{
botOutput.Text += item.InnerText + "</br>";
}
如果headingNames
较大,则应该使用StringBuilder
,否则会产生不必要的GC压力,因为string
是不可变的。