2011-01-20 10 views
1

私のコードにいくつかの問題があります。ページからすべての段落を取り出そうとしていますが、現時点では最後の段落のみを選択しています。Html Agility Pack C#段落解析の問題

ここは私のコードです。

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

答えて

4

ループでは、現在のノードinnerTextを取得してラベルに割り当てています。これを各ノードノードに行うので、最後のノードだけが表示されます。以前のノードは保存されません。

はこれを試してみてください:

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

よかったよ。 – mintuz

+0

これは変更されましたか? doc(これは、 "HtmlDocument doc = new HtmlDocument();"のような宣言からのもので、私にとってはうまくいきません、具体的には "DocumentNode"というメンバはありません...)これはHtmlAgilityPackという新しいNuGet 1.438.02) –

+0

@ B.ClayShannon - http://htmlagilitypack.codeplex.com/SourceControl/latest#Trunk/HtmlAgilityPack/HtmlDocument.cs < - それは確かにそこにあるように見えます – Oded

1

IMO、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; 
} 
+0

はそれを把握するために私にしばらく時間がかかりました。ループの中で何をしているのか見てください。 – Oded

+0

@Oded、ああ、ええ、いいキャッチ。 –

関連する問題