一般来说,机器人和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>";
}
}
任何帮助,将不胜感激。
尝试在+
之前添加=
。目前看起来你只是在每个循环上覆盖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>";
}
你不断更换(而不是追加)。改为:
foreach (var item in headingNames)
{
botOutput.Text += item.InnerText + "</br>";
}
可能值得注意的是,如果headingNames
很大,你应该使用StringBuilder
或者你产生不必要的GC压力,因为string
是不可变的。