Я пытаюсь проанализировать эту HTML-страницу здесь с помощью пакета Agility Pack HTML, но я не могу заставить ее работать должным образом.
Это моя страница (сокращенная):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de-ch" xml:lang="de-ch">
<head>
</head>
<body id="Adressservices">
<div id="page">
<div id="page-544">
<table class="full">
<thead>
<tr>
<th class="first" scope="col" style="width: 18%;">Type</th>
<th class="col" style="width: 20%;">Name</th>
<th class="col">Date</th>
<th class="col" style="text-align: right; width: 10%;">Size</th>
</tr>
</thead>
<tbody>
<tr>
<td class="first">Change</td>
<td><a href="/download?file=5210044">somefile01.zip</a></td>
<td style="width: 5%;"><b class="filesize">2012-03-01</b></td>
<td style="text-align: right;"><b class="filesize">881.00</b></td>
</tr>
<tr>
<td class="first">Change</td>
<td><a href="/download?file=7610042">somefile02.zip</a></td>
<td style="width: 5%;"><b class="filesize">2012-02-01</b></td>
<td style="text-align: right;"><b class="filesize">1400.00</b></td>
</tr>
<tr>.....</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
На настоящей странице есть еще несколько <tr>....</tr>
строк в этой таблице.
Мне удалось прекрасно загрузить страницу с помощью HTML Agility Pack, используя этот фрагмент кода:
HtmlWeb web = new HtmlWeb();
HtmlDocument archiveDoc = web.Load(_archiveUrl);
var tables = archiveDoc.DocumentNode.SelectNodes("//table");
Таким образом, я получаю дескриптор моего элемента <table>
, он работает просто отлично.
Теперь я пытался получить элемент first <tr>
из этой таблицы, и я попробовал это:
HtmlNode node = tables[0];
var allTRNodes = node.SelectNodes("tbody/tr");
var firstTR = allTRNodes[0];
Здесь я не получаю n <tr>
узлов, как ожидалось, - только два.И первый из них не содержит списка y дочерних узлов типа <td>
либо ...
Затем я попробовал Linq-to- "HTML":
HtmlNode node = tables[0];
var firstTR = node.Element("tbody").Element("tr");
но опять же: я не получаю первый <tr>
узел, содержащий список y дочерних узлов типа <td>
, либо ...
Пытаюсь получить список всех <td>
узлов внутри первого<tr>
также не работает должным образом:
HtmlNode node = tables[0];
var allTDNodes = node.SelectNodes("tbody/tr/td");
var firstTD = allTDNodes[0];
вместо ожидаемых узлов y <td>
, я получаю только три дочерних узла - два из #text
, последнийтипа <td>
- почему ??
Похоже, HTML Agility Pack неправильно интерпретирует список <td>
узлов как вложенные узлы ......
Есть идеи?Мысли?Советы, как это решить?