2013-03-16 27 views
5

HTMLAgilityPackでid属性を持つtdの内部テキストを選択しようとしています。HTMLAgilityPack id属性を持つtdタグのinnerTextを取得する

HTMLコード:

<td id="header1"> 5 </td> 
<td id="header2"> 8:39pm </td> 
<td id="header3"> 8:58pm </td> 
... 

コード:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 

doc.LoadHtml(data); 

var nodes = doc.DocumentNode.SelectNodes("//td[@id='header1']"); 

if (nodes != null) 
{ 
    foreach (HtmlAgilityPack.HtmlNode node in nodes) 
    { 
     MessageBox.Show(node.InnerText); 
    } 
} 

私は私が正しくTDタグを選択するわけではないので、ヌルのノードを取得しておくが、私は間違って何をしたかを把握することはできません...

編集:

私はheader1とheader2でミスをしましたが、5 d他のtdタグにヘッダー1から5が付いています。

+1

あなたはこれらのIDを確認しましたあなたヘクタール撮影されました。 ''そして、あなたは** '(// td [@ id = 'header1'"); ** ** –

+1

から検索していますhtmlでは、idは 'header2'です。 'header1'として指定されています。 –

+0

あなたのコードは正しいようです。あなたのデータをどこかに投稿できますか? –

答えて

6

header1を選択しようとしていますが、IDはheader2です。

また、直接GetElementByIdを使用することができます。

var td = doc.GetElementbyId("header2"); 
1

うーん..私はあなたが何も悪いことをやっているとは思いません。コードでは、<td>のみをid="header1"としてください。あなたが持っている場合は、header5からheader1から、あなたがすることができる、のは言わせて:

for (int i = 1; i <= 5; i++) { 
    var tdNode = doc.DocumentNode.SelectSingleNode(string.Format("//td[@id='header{0}']", i)); 

    //do something with the node here 
} 

私はあなたがnullを取得している、なぜ私たちはあなたを伝えることができるようにあなたは、あなたの全体のコードを掲示示唆しているが、また、より良い方法を。。//tr[@id='some-id']//td[contains(@id, 'header')]のような(例えば、何か上記のループを実行せずに<td>ノードを解析するの

0

あなたはinnerHTMLのプロパティなどを用いて、あなたの問題を解決することができます:

var td = doc.GetElementbyId("header2").InnerHtml; 
関連する問題