私はhtml-agility-packを使い、特定のhtmlを選択しようとしています。取得したい部分は、これらのブロックのすべてのGTIN番号です。
<td><span class="mobile-only">GTIN:</span>07330155011068</td>
- 私が望む部分は、終了スパンタグの後の数字です。例:07330155011068。以下は私のhtmlと私のc#-methodです:
<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>
<th><a href="#">Brand</a></th>
<th><a href="#">GTIN</a></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<a href="http://www.dabas.com/ProductSheet/Detail.ashx/121308" target="_blank">
Dalapannkaka fryst ca100st 6kg
</a>
</td>
<td><span class="mobile-only">Tillverkarens art.nr:</span>11068</td>
<td><span class="mobile-only">Varumärke:</span>test</td>
<td><span class="mobile-only">GTIN:</span>07330155011068</td>
</tr>
<tr>
<td>
<a href="http://www.dabas.com/ProductSheet/Detail.ashx/124494" target="_blank">
Dessertpannkaka fryst ca100st 6kg
</a>
</td>
<td><span class="mobile-only">Tillverkarens art.nr:</span>11405</td>
<td><span class="mobile-only">Varumärke:</span>test</td>
<td><span class="mobile-only">GTIN:</span>07330155114059</td>
</tr>
</tbody>
</table>
</div>
私はこのメソッドを使って自分の値を取得しようとしています。問題は、GTIN番号を含むinnerHtmlを取得するためにSelectNode()に書き込むコードがわからないことです。
public void TestGetHtml()
{
var doc = new HtmlDocument();
doc.Load("C:/Users/Desktop/test.html");
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("TODO: Add code to select all GTIN"))
{
}
doc.Save("file.htm");
}
Xpathを使用して、 tableSearchArticleという IDを持つ表のボディから4番目のセルを選択します。次に、セルの内部テキストを取得し( GTIN:07330155114059
などのhtmlタグなし)、GTINプレフィックスを削除します。
var xpath = "//table[@id='tableSearchArticle']/tbody/tr/td[4]";
var gtins = doc.DocumentNode.SelectNodes(xpath)
.Select(td => td.InnerText.Replace("GTIN:", ""));
出力:
[
"07330155011068",
"07330155114059"
]
SelectNodes
XPath式を受け取ります。だから、あなたはこれ(未テスト)から始めることができます:
foreach (HtmlNode tr in doc.DocumentNode.SelectNodes(
"//div[@class='table-wrapper']/table[@id='tableSearchArticle']/tbody/tr"))
{
Console.WriteLine(tr.InnerHtml);
Console.WriteLine(tr.SelectSingleNode(".//a").GetAttribute("href"));
Console.WriteLine(tr.SelectSingleNode(".//td[last()]").InnerText);
}