2010-07-30 7 views
1

Как я могу прокручивать таблицу и строку с идентификатором или именем атрибута, чтобы получить внутренний текст в глубине в каждой ячейке td? Я работаю над asp.net, C# и новейшим пакетом гибкости html. Пожалуйста, направляйте. Спасибо.Html Agility Pack - цикл через строки и столбцы

В файле html есть несколько таблиц. Один из них имеет атрибут id = main-part. В этой идентифицированной таблице много строк. Некоторые из этих строк имеют одинаковое имя атрибута = отображение. В этих именованных строках есть много столбцов, из которых мне нужно извлечь текст. Что-то вроде этого:

<body> 
<table> 
... 
</table> 
<table> 
... 
</table> 

<table id="main-part"> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
    <tr name="display"> 
    <td>Jan</td> 
    <td>Feb</td> 
    <td>Mar</td> 
    ... 
    </tr> 
     <tr name="display"> 
    <td>Apr</td> 
    <td>May</td> 
    <td>June</td> 
    ... 
    </tr> 
     <tr name="display"> 
    <td>Jul</td> 
    <td>Aug</td> 
    <td>Sep</td> 
    ... 
    </tr> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
    <tr name="display"> 
    <td>Oct</td> 
    <td>Nov</td> 
    <td>Dec</td> 
    ... 
    </tr> 
    <tr> 
    <td></td> 
    ... 
    </tr> 
</table> 
<table> 
... 
</table> 
</body> 
+0

обратитесь к этой ссылке. Пример использования пакета htmlagility .. [щелкните здесь] (http://forums.asp.net/t/1508198.aspx?PageIndex=2) –

+0

Я следил за ссылкой и там это что-то интересное. Спасибо. – David

ответ

2

Вы должны выбрать эти узлы с помощью XPath:

foreach(HtmlNode cell in doc.DocumentElement.SelectNodes("//tr[@name='display']/td") 
{ 
    // get cell data 
} 
+0

Благодарим вас за помощь. Для нового пакета, который я получил, я использую DocumentNode вместо DocumentElement. – David

1

Это сработало! Большое спасибо Одед.

HtmlDocument doc = new HtmlDocument(); 
     doc.Load(@"C:/samplefolder/sample.htm"); 
foreach(HtmlNode cell in doc.DocumentNode.SelectNodes("//tr[@name='display']/td")) 
{ 
     string test = cell.InnerText; 
     Response.Write(test); 
} 

Он показал результат, как JanFebMarAprMayJuneJulAugSepOctNovDec. Как я могу их отсортировать, разделяя пробел или вкладку? Спасибо.

+0

Возможно, это должен быть новый вопрос? В любом случае, когда вы выполняете 'Response.Write', вы можете добавить запятую в конце -' Response.Write (test + ","); ' – Oded

+0

вы также должны повышать и принимать ответы, если они действительно помогли. См. FAQ - http://stackoverflow.com/faq – Oded

+0

просто используйте Response.WriteLine (тест); INSTEAD OF Response.Write (тест); и в конце этого все делают Response.ReadLine(); поэтому вы можете увидеть его и подтвердить, что все это так, как вы ожидаете, прежде чем нажать [Enter], чтобы выйти из экрана. –