2012-04-12 11 views
0

以下の表を解析しようとしていますが、残念ながら各ノードがネストされているようです。 :(常に、カウントを与えているので、=のchildNodesを取得することは不可能である1HtmlAgility Packはネストしたテーブルから情報を取得するのが難しいです。

それは本当に面白いですが、それを見つけることです。?たとえば、前のTRの子ノードとして、次の「TR」を

あなたはどんな考えを持っていますか

<table width="292px" border="0"> 
    <tr> 
     <td> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <table> 
       <tr> 
        <td colspan="2" bgcolor="#FBCE9D" align="center" height="40"> 
        </td> 
       </tr> 
       <tr> 
        <td bgcolor="#FFF4D2" height="25" width="60"> 
        </td> 
        <td height="25" bgcolor="#e8e8e8"> 
        </td> 
       </tr> 
       <tr> 
        <td bgcolor="#FFF4D2" height="25" width="60"> 
        </td> 
        <td height="25" bgcolor="#e8e8e8"> 
        </td> 
       </tr> 
       <tr> 
        <td bgcolor="#FFF4D2" height="25" width="60"> 
        </td> 
        <td height="25" bgcolor="#e8e8e8"> 
        </td> 
       </tr> 
       <tr> 
        <td bgcolor="#FFF4D2" height="25" width="60"> 
        </td> 
        <td height="25" bgcolor="#e8e8e8"> 
        </td> //Here is a missing "</tr>" and I think this one is confusing the agilitypack! 
        <tr> 
         <td bgcolor="#FFF4D2" height="35" colspan="2" align="center"> 
         </td> 
        </tr> 
      </table> 
     </td> 
    </tr> 
</table> 

私のコードされています?実はこのコードは、前に魔法のように働いていたが、それはのwiをstuckingされる内部の彼らは別のテーブルを入れ子に

var webGet = new HtmlWeb(); 
var doc = webGet.Load("the url where this table is located"); 
HtmlNodeCollection tb = doc.DocumentNode.SelectNodes("//table[@width='292px']"); 
         var table = tb[0].ChildNodes[1].ChildNodes[0].ChildNodes[0].ChildNodes; 
         for (var na = 0; na < table.Count; na++) 
         { .....do the work.... } 

ChildNodes[1]ChildNodes[1]が存在しないため、常にChildNodes[0]ですか?

もう1つ注意してください。 FirebugはネストされたテーブルのXPathとして "/ html/body/table/tbody/tr [2]/td/table/tbody"を表示しますが、 "tbody"はhtmlagilityを熟知していません。不足しているクローズタグ/ trを除去するブラウザ

+0

あなたのコードはどのように見えますか? – shriek

+0

申し訳ありませんが、私は忘れてしまった。あなたは上にそれを見つけることができます。 – MrGorki

答えて

1

それは本当に面白いです

doc.DocumentNode.SelectNodes("//table[@width='292px']/tr/td/table/tr") 

の下にこれを試すことができますが、問題は、パックHmtlAgilityたこと実際にNugetで利用可能です!私はそれを削除し、Web(http://htmlagilitypack.codeplex.com/)からダウンロードしました。それは今働いている!

0

XPATHここで多くのことが役立ちます。あなたは、内部テーブル内tdノードを通過する場合、内部テーブルtrノードの場合

あなたはその後、

doc.DocumentNode.SelectNodes("//table[@width='292px']/tr/td/table/tr/td") 
+0

残念ながら、それは動作しませんでした。しかし今回も私はそれに気づいた。そこには64個のパースエラーが含まれています。この表には「終了タグここでは無効です」と同様のものがあります...だから、彼らは私たちのような人々を排除する目的でこの壊れた構造を作ったと思う: – MrGorki

+0

私は、 – MrGorki

+0

@Gorkem - なぜそれがうまくいかなかったのかわかりません。あなたが探しているものを精巧に教えてください。実際のURLを教えてください。 'tbody'はコードに存在しないので、心配する必要はありません。私は間違った' HTML'構造がプログラミングのバグかもしれないと思っています、それは意図的なものではないと思います。 –

関連する問題