Html Agility Pack обрабатывает строки и столбцы таблицы

.net c# html-agility-pack

Вопрос

У меня есть таблица, подобная этой

<table border="0" cellpadding="0" cellspacing="0" id="table2">
    <tr>
        <th>Name
        </th>
        <th>Age
        </th>
    </tr>
        <tr>
        <td>Mario
        </td>
        <th>Age: 78
        </td>
    </tr>
            <tr>
        <td>Jane
        </td>
        <td>Age: 67
        </td>
    </tr>
            <tr>
        <td>James
        </td>
        <th>Age: 92
        </td>
    </tr>
</table>

И хотите использовать HTML Agility Pack для его анализа. Я пробовал этот код безрезультатно:

foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//table[@id='table2']//tr"))
{
    foreach (HtmlNode col in row.SelectNodes("//td"))
    { 
        Response.Write(col.InnerText); 
    }
}

Что я делаю не так?

Принятый ответ

Я должен был предоставить полный xpath. Я получил полный xpath, используя Firebug из предложения @Coda ( https://stackoverflow.com/a/3104048/1238850 ), и я закончил с этим кодом:

foreach (HtmlNode row in doc.DocumentNode.SelectNodes("/html/body/table/tbody/tr/td/table[@id='table2']/tbody/tr"))
{
    HtmlNodeCollection cells = row.SelectNodes("td");
    for (int i = 0; i < cells.Count; ++i)
    {
        if (i == 0)
        { Response.Write("Person Name : " + cells[i].InnerText + "<br>"); }
        else {
            Response.Write("Other attributes are: " + cells[i].InnerText + "<br>"); 
        }
    }
}

Я уверен, что это может быть написано лучше, чем это, но сейчас оно работает для меня.


Популярные ответы

Я запустил код, и он отображает только имена , что верно, потому что возраст определяется с помощью неверного HTML: <th></td> (возможно, опечатка).

Кстати, код можно упростить только в одном цикле:

foreach (var cell in doc.DocumentNode.SelectNodes("//table[@id='table2']/tr/td"))
{
    Response.Write(cell.InnerText);
}

Вот код, который я использовал для тестирования: http://pastebin.com/euzhUAAh



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему