Я слышал хорошие вещи о библиотеке HTMLAgilityPack, поэтому я решил попробовать, но у меня был абсолютно нулевой успех. Я пытался понять это несколько месяцев. Независимо от того, что я делаю, я не могу заставить этот код дать мне что-то иное, кроме нулевого. Я попытался выполнить этот пример ( http://www.c-sharpcorner.com/uploadfile/9b86d4/getting-started-with-html-agility-pack/ ), но я не получаю одинаковых результатов, и я не могу объяснить, почему.
Я пытаюсь загрузить файл, а затем запустить SelectNodes, чтобы выбрать все гиперссылки, но он всегда возвращает пустой список. Я попытался выбрать все виды узлов (divs, p, a, все и что угодно), и он всегда возвращает пустой список. Я пытался использовать doc.Descendants, я пытался использовать разные исходные файлы, локально и в Интернете, и ничто из того, что я делаю, никогда не вернет фактический результат.
Я, должно быть, забыл что-то важное, но я не могу понять, что это такое. Что я могу пропустить?
Код:
public string GetSource()
{
try
{
string result = "";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
if (!System.IO.File.Exists("htmldoc.html"))
throw new Exception("Unable to load doc");
doc.LoadHtml("htmldoc.html"); // copied locally to bin folder, confirmed it found the file and loaded it
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a"); // Always returns null, regardless of what I put in here
if (nodes != null)
{
foreach (HtmlNode item in nodes)
{
result += item.InnerText;
}
}
else
{
// Every. Single. Time.
throw new Exception("No matching nodes found in document");
}
return result;
}
catch (Exception ex)
{
return ex.ToString();
}
}
Исходный HTML-файл «htmldoc.html», который я использую, выглядит следующим образом:
<html>
<head>
<title>Testing HTML Agility Pack</title>
</head>
<body>
<div id="div1">
<a href="div1-a1">Link 1 inside div1</a>
<a href="div1-a2">Link 2 inside div1</a>
</div>
<a href="a3">Link 3 outside all divs</a>
<div id="div2">
<a href="div2-a1">Link 1 inside div2</a>
<a href="div2-a2">Link 2 inside div2</a>
</div>
</body>
</html>
Чтобы загрузить файл, вы должны использовать метод Load
. LoadHtml
используется для строк, содержащих html
doc.Load("htmldoc.html");