2011-10-17 14 views
4

c#4.0とhtmlagilitypackを使用すると、特定のテーブルの値をどのように読み取ることができますか。私は10のテーブルがあり、6番目の値を読みたい、またはテーブルIDがあると言うことができます。HtmlAgilityPack - 特定のテーブルを読み取る方法 - c#4.0

または、私は特定のtdの後に来るtd値を読みたいとします。

または、特定のdivまたは要素またはテキストの後にテーブルが来る。これらは可能ですか?

+2

あなたはどういうことを言っていますか?マークアップを表示します。フェッチする必要があることを説明します。 –

+1

何を試しましたか?まともなスターターはここにあります:http://www.4guysfromrolla.com/articles/011211-1.aspx私はそれを読んで、あなたが言及したことを試してみて、それを得ることができないなら、もっと具体的な状況に戻ってください。 –

+1

リンクに感謝します。たとえば、ページに多数の表が存在する可能性があります。私は特定のキーワードまたはdiv要素の後にテーブルを取得したいと言うことができます。どうやってやるの ?特定のマークアップ後に要素を読み込みます。 – MonsterMMORPG

答えて

15

あなたが質問したことはすべて、比較的簡単に行うことができます。そのドキュメントが不足している可能性はありません。XMLとネットワークのXmlDocumentの実装と使用方法と機能の両方に似ている必要があります。

特定のテーブルの値を読み取るにはどうすればよいですか? 10個のテーブルがあり、6番目の値を読みたい、またはテーブルIDがあるとします。

第六表を検索:

// XPath 
var table6 = doc.DocumentNode.SelectSingleNode("//table[6]"); 

// LINQ 
var table6 = doc.DocumentNode.Descendants("table").Skip(5).FirstOrDefault(); 

IDによってテーブル/要素を見つける:

var myTable = doc.GetElementById("myTable"); 

// XPath 
var myTable = doc.DocumentNode.SelectSingleNode("//table[@id='myTable']"); 
var myTable = doc.DocumentNode.SelectSingleNode("//*[@id='myTable']"); 

// LINQ 
var myTable = doc.DocumentNode 
    .Descendants("table") 
    .Where(table => table.Attributes.Contains("id")) 
    .SingleOrDefault(table => table.Attributes["id"].Value == "myTable"); 
var myTable = doc.DocumentNode 
    .Descendants() 
    .Where(e => e.Attributes.Contains("id")) 
    .SingleOrDefault(e => e.Attributes["id"].Value == "myTable"); 
var myTable = doc.DocumentNode 
    .Descendants("table") 
    .SingleOrDefault(table => table.GetAttributeValue("id", null) == "myTable"); 
var myTable = doc.DocumentNode 
    .Descendants() 
    .SingleOrDefault(e => e.GetAttributeValue("id", null) == "myTable"); 

だが、私は特定のtdの後に来て、TD値を読みたいとしましょう。特定のdiv要素またはテキストまたは後に来

// XPath 
var certainTd = table6.SelectSingleNode("//td[2]"); 
var tdAfterCertainTd = certainTd.SelectSingleNode("following-sibling::td[1]"); 

// LINQ (not so easy) 
var certainTd = table6.Descendants("td").Skip(1).FirstOrDefault(); 
var tdAfterCertainTd = certainTd.NextSibling; 
while (tdAfterCertainTd != null) 
{ 
    if (tdAfterCertainTd.Name == "td") 
     break; 
    tdAfterCertainTd = tdAfterCertainTd.NextSibling; 
} 

表。

// XPath 
var certainDiv = doc.DocumentNode.SelectSingleNode("//div[1]"); 
var tableAfterCertainDiv = certainDiv.SelectSingleNode("following-sibling::table[1]"); 

// LINQ (not so easy) 
var certainDiv = doc.DocumentNode.Descendants("div").FirstOrDefault(); 
var tableAfterCertainDiv = certainDiv.NextSibling; 
while (tableAfterCertainDiv != null) 
{ 
    if (tableAfterCertainDiv.Name == "table") 
     break; 
    tableAfterCertainDiv = tableAfterCertainDiv.NextSibling; 
} 

あなたはいくつかのパターンに気づくはずです。

+1

おかげです。私はxpathを学ぶことができる場所はありますか?任意の良いチュートリアルのeブックまたはビデオ。ありがとうございました。 – MonsterMMORPG

+1

私はチュートリアルのサイトを知らない。演算子、関数、構文をリストし、いくつかのデータを処理するプログラムを書くことをお勧めします。そして、たくさんしてください。 –

関連する問題