Прежде всего, вы должны заметить, что SelectSingleNode
вернет только один узел.Точно так, как говорит название функции.Из документации возвращается:
Первый HtmlAgilityPack.HtmlNode, который соответствует запросу XPath или нулевой ссылке, если не найдено ни одного соответствующего узла.
Вы можете использовать SelectNodes
вместо.Что возвращает:
Коллекция HtmlAgilityPack.HtmlNodeCollection, содержащая коллекцию узлов, соответствующих запросу HtmlAgilityPack.HtmlNode.XPath, или ноль, если ни один узел не соответствует выражению XPath.
InВ вашем случае это вернет 3 значения.Если этот номер всегда один и тот же, вы можете просто использовать это:
var document = new HtmlDocument();
document.LoadHtml(html);
HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//span[@class='polyxgo_bold']/following-sibling::text()[1]");
Console.WriteLine(nodes[1].InnerText);
, который выдаст: 14/12/2018
.
Обновление:
Есть еще один способ сделать это.Вы можете использовать DateTime.TryParse
, чтобы проверить, является ли внутренний текст датой, а затем вывести ее.Например:
var document = new HtmlDocument();
document.LoadHtml(html);
HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//span[@class='polyxgo_bold']/following-sibling::text()[1]");
DateTime dt;
foreach (HtmlNode node in nodes)
{
if (DateTime.TryParse(node.InnerText.Trim(),out dt))
{
Console.WriteLine(node.InnerText.Trim());
}
}
И еще один способ - проверить, является ли первый текст в этом интервале "Exp:", таким образом:
var document = new HtmlDocument();
document.LoadHtml(html);
HtmlNodeCollection nodes = document.DocumentNode.SelectNodes("//span[@class='polyxgo_bold']/following-sibling::text()[1]");
HtmlNodeCollection nodesText = document.DocumentNode.SelectNodes("//span[@class='polyxgo_bold'][1]");
HtmlNode htmlNode = nodesText.SingleOrDefault(x => x.InnerText.Trim() == "Exp:");
if (htmlNode != null)
{
Console.WriteLine(nodes[nodesText.GetNodeIndex(htmlNode)].InnerText.Trim());
}