@ Оде, ах, да, хороший улов.

я есть пара проблем с моим кодом, я пытаюсь вытащить каждый абзац со страницы, но на данный момент он только выбирает последний абзац.

вот мой код

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[@id='body']/p"))
{
  string text = node.InnerText;
  lblTest2.Text = text;
}

Ответы на вопрос(2)

Решение Вопроса

е. Вы делаете это длякаждый узел, так что, конечно, вы видите только последний - вы не сохраняете предыдущие.

Попробуй это:

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[@id='body']/p"))
{
  string text = node.InnerText;
  lblTest2.Text += text + Environment.NewLine;
}
 mintuz20 янв. 2011 г., 23:15
Спасибо, что работал.
 B. Clay Shannon14 февр. 2014 г., 20:38
Спасибо; проблема заключалась в том, что «используя HtmlDocument = System.Windows.Forms.HtmlDocument;» каким-то образом был добавлен в мое предложение using, и эта общая версия HtmlDocument использовалась; Я должен был явно указать "HtmlAgilityPack.HtmlDocument" для правильного класса, который будет создан.
 Oded14 февр. 2014 г., 20:34
@ B.ClayShannon -htmlagilitypack.codeplex.com/SourceControl/latest#Trunk/... <- это, конечно, выглядит так, как будто оно есть.
 B. Clay Shannon14 февр. 2014 г., 20:04
Это изменилось? doc (при условии, что это из объявления типа "HtmlDocument doc = new HtmlDocument ();" у меня не работает; в частности, у него нет члена "DocumentNode" ...? Это с новым NuGet из HtmlAgilityPack (версия 1.4.6.0)

XPath это не весело. Я бы рекомендовал вместо этого использовать синтаксис LINQ:

foreach (var node in doc.DocumentNode
    .DescendantNodes()
    .Single(x => x.Id == "body")
    .DescendantNodes()
    .Where(x => x.Name == "p")) 
{
    string text = node.InnerText;
    lblTest2.Text = text;
}
 Kirk Woll20 янв. 2011 г., 23:42
@ Оде, ах, да, хороший улов.
 Oded20 янв. 2011 г., 23:02
Мне понадобилось время, чтобы понять это. Посмотри что он делаетв петля.

Ваш ответ на вопрос