2011-10-17 30 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和網絡的使用和功能實現。

如何讀取某些表內的值?假設有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值。

// 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。任何好的教程電子書或視頻。謝謝。 – MonsterMMORPG

+1

我不知道任何教程網站。我只是建議找到一個列出運算符,函數和語法的程序,並嘗試編寫程序來處理一些數據。並做很多。 –