Почему мой Foreach выводит только первый бит данных? - PullRequest
1 голос
/ 14 марта 2019

Достаточно новый для ботов и 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>";
    }
}

Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 14 марта 2019

Попробуйте добавить + перед вашим =.В настоящее время похоже, что вы просто перезаписываете свойство 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>";
}
2 голосов
/ 14 марта 2019

Вы постоянно заменяете (вместо добавления).Сделайте это вместо этого:

foreach (var item in headingNames)
{
    botOutput.Text += item.InnerText + "</br>";
}

Вероятно, стоит отметить, что если headingNames велико, вам следует использовать StringBuilder или вы создаете ненужное давление ГХ, потому что string является неизменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...