Ну, вы можете сделать это несколькими способами ...
Например, если HTML-код, который вы хотите проанализировать, является тем, который вы написали в своем вопросе, простой способ может быть:
- Сохранение всех дат в коллекции HtmlNodeCollection
- Сохранить все заголовки в коллекции HtmlNodeCollection
- Сохранить все внутренние тексты в другой коллекции HtmlNodeCollection
Если все в порядке и HTML имеет такой макет, у вас будет одинаковое количество элементов в обеих 3 коллекциях.
Тогда вы можете легко сделать:
for (int i = 0; i < innerTexts.Count; i++) {
//Get Date, Headers and Inner Texts at position i
}
Должно работать следующее:
var document = new HtmlWeb().Load("http://www.url.com"); //Or load it from a Stream, local file, etc.
var dateNodes = document.DocumentNode.SelectNodes("//div[@class='mvb']/b");
var headerNodes = document.DocumentNode.SelectNodes("//div[@class='mxb']/b");
var innerTextNodes = (from node in document.DocumentNode.SelectNodes("//div")
let previous = node.PreviousSibling
where previous.Name == "div" && previous.GetAttributeValue("class", "") == "mxb"
select node).ToList();
//Check here if the number of elements of the 3 collections are the same
for (int i = 0; i < dateNodes.Count; i++) {
var date = dateNodes[i].InnerText;
var header = headerNodes[i].InnerText;
var innerText = innerTextNodes[i].InnerText;
//Now you have the set you want: You have the Date, Header and Inner Text
}
Это способ сделать это.
Конечно, вы должны проверить наличие исключений (метод .SelectNodes(..)
не возвращает null
), проверить ошибки в выражении LINQ при сохранении innerTextNodes
и выполнить рефакторинг for (...)
, возможно, в метод, который получает HtmlNode
и возвращает его InnerText
свойство.
Примите во внимание, что единственный способ узнать в размещенном вами HTML-коде, что такое тег <div>
, содержащий внутренний текст, - это предположить, что он находится рядом с тегом <div>
. который содержит заголовок. Вот почему я использовал выражение LINQ.
Другой способ узнать это может быть, если <div>
имеет какой-то определенный атрибут (например, class="___"
) или аналогичный, или если он содержит некоторые теги внутри, а не только текст. При разборе HTML-кода нет никакой магии:)
Edit:
Я не проверял этот код. Проверьте это сами и дайте мне знать, если это сработало.