2012-01-18 6 views
0

HTML表のセルから特定のフィールドを取り出す必要があります。 Firebugを使用して、私は必要なセルに正確なXPathを得ることができました(残念ながら、セルにはidタグがありません)。私はDocumentNode.SelectSingleNodeを使用してそのパスを渡すことができると考えましたが、正しく動作していないようです。私は間違って何をしていますか?それとも私がこれをやっているのかより良いアプローチがありますか?残念ながら、私はXPathの経験がないので、これは私が期待していたよりも難しくなっています。ここで私はこれまでのところ(私はHTMLがparticuarly厄介ですけど、それは変更することが私のコントロールではありません)しているものです:HTMLアジリティパックを使用して特定の表のセルを選択する方法

Dim page As New HtmlAgilityPack.HtmlDocument 
Dim node As HtmlAgilityPack.HtmlNode 
page.LoadHtml(fileContents) 
node = page.DocumentNode.SelectSingleNode("/html/body/form/div[6]/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td[2]") 

感謝。

答えて

1

Firebugは、壊れたhtmlタグを修正することができます。 Htmlノードを選択したい場合は、クラスまたはIDの使用をお勧めします。例えば :

//div[@class='content']//table//tr[1]/td[2] 

パスを短縮し、クラスまたはIDセレクタを使用します。テーブルは、それ自身のIDを持っている場合

、あなたが使用することができます。

//table[@id='tableid']/tr[1]/td[2] 

あなたはXPATHが面白いです見つけるでしょう、それを試してみてください。

+0

ありがとうございます!親テーブルの1つにIDがあり、そのアプローチを使用して、必要なものまでドリルダウンすることができました。 – Avi

+0

HtmlAgilityPackにはXPathセレクタにいくつかのバグがあります。C#のXmlコンポーネントのバグかもしれません。 "// table [@ id = 'tableid']/tr [3]/td [2]」によって3番目のtrを選択することがあります。それはnullを返すことがあります.... – DennisZhong

関連する問題