У меня есть этот html:
<div class="table-wrapper" style='display: block;'>
<table id="tableSearchArticle">
<thead>
<tr>
<th><a href="#">Article</a></th>
<th><a href="#">art.nr.</a></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<a href="http://www.dabas.com/ProductSheet/Detail.ashx/121308" target="_blank">
Apple
</a>
</td>
<td><span class="mobile-only">Tillverkarens art.nr:</span>11068</td>
</tr>
<tr>
<td>
<a href="http://www.dabas.com/ProductSheet/Detail.ashx/124494" target="_blank">
Banana
</a>
</td>
<td><span class="mobile-only">Tillverkarens art.nr:</span>11405</td>
</tr>
</tbody>
</table>
И это мой метод, который должен получить все href-адреса в таблице. Но теперь я получаю только список названий статей. Мой список возвращает Apple, Banana. Я хочу вернуть список href-http-адресов. Как я могу это сделать?
public List<string> GetListOfHrefs()
{
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("http://www.dabas.com/mypages/search.aspx?typ=FP&sosokord=laggen");
var xpath = "//table[@id='tableSearchArticle']/tbody/tr/td[1]//@href";
var listOfGtins = doc.DocumentNode.SelectNodes(xpath)
.Select(td => td.InnerText.Replace("GTIN:", "")).ToList();
return listOfGtins;
}
Две проблемы в вашем XPath - href
является атрибутом a
элементе, а не td
элемента, и вы не можете выбрать атрибуты с помощью XPath - вы должны выбрать элементы:
var xpath = "//table[@id='tableSearchArticle']/tbody/tr/td/a[@href]";
var links = doc.DocumentNode.SelectNodes(xpath)
.Select(a => a.Attributes["href"].Value);
Вывод:
[
"http://www.dabas.com/ProductSheet/Detail.ashx/121308",
"http://www.dabas.com/ProductSheet/Detail.ashx/124494"
]