2013-05-28 3 views
1

У меня есть простой HTML таблицы:Получение ссылки из таблицы через HtmlAgilityPack

<table> 
    <tr> 
    <td> 
     <a href="http://someurl_1.com">item name1</a> 
    </td> 
    <td> 
     Value 1 
    </td> 
    </tr> 
    <tr> 
    <td> 
     <a href="http://someurl_2.com">item name2</a> 
    </td> 
    <td> 
     Value 2 
    </td> 
    </tr> 
</table> 

Теперь мне нужно иметь данные из этой таблицы в виде списка> (или строки [] [])

, чтобы получить это я Применение:

 List<List<string>> 
      table = doc.DocumentNode.SelectSingleNode("//table") 
        .Descendants("tr") 
        .Skip(1) 
        .Where(tr => tr.Elements("td").Count() > 1) 
        .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim()).ToList()) 
        .ToList(); 

это, заставляет меня успешно только строковые данные, так что в итоге у меня

table[0][0] -> item name1 
table[0][1] -> value 1 
table[1][0] -> item name2 
table[1][1] -> value 2 

, но у меня нет url в этом массиве.

Как я могу получить его табличного значения, так что в итоге мне нужно иметь как:

table[0][0] -> http://someurl_1.com 
table[0][1] -> item name1 
table[0][2] -> value 1 
table[1][0]-> http://someurl_2.com 
table[1][1] -> item name2 
table[1][2] -> value 2 

Любая помощь ценим! Спасибо

ответ

0

Я предлагаю использовать xpath для каждой ячейки и сопоставлять их данные с вашим массивом.

Например, XPath второго элемента является /HTML/тело/стола/TBODY/тр [2]/тдом [1]/д

var doc = new HtmlAgilityPack.HtmlDocument(); 
    doc.LoadHtml(htmlText); 
    var nodes = doc.DocumentNode.SelectNodes("/html/body/table/tbody/tr[2]/td[1]/a"); 

даст вам <a href="http://someurl_2.com">item name2</a> как узел которые вы можете править, чтобы захватить URL-адрес или текст.

+0

Спасибо, это помогает! – ihorko

Смежные вопросы