Ich kann das einfach nicht verstehen.
Ich muss alle Knoten durchsuchen, die Klassen mit "item extend featured"
Werten enthalten (Code unten). In diesen Klassen muss ich jeden InnerText von <h2 class="itemtitle">
und href
Wert auswählen, plus alle InnerTexts von <div class="title-additional">
.
<li class="item extend featured">
<div class="title-box">
<h2 class="itemtitle">
<a target="_top" href="www.example.com/example1/example2/exammple4/example4" title="PC Number 1">PC Number 1</a>
</h2>
<div class="title-additional">
<div class="title-km">150 km</div>
<div class="title-year">2009</div>
<div class="title-price">250 €</div>
</div>
Die Ausgabe sollte etwa so aussehen:
Title:
href:
Title-km:
Title-year:
Title-Price:
--------------
Title:
href:
Title-km:
Title-year:
Title-Price:
--------------
Also, die Frage ist, wie man durch alle "item extend featured"
Knoten in html und wählen Sie die Elemente, die ich brauche oben von jedem Knoten?
Soweit ich weiß, sollte so etwas funktionieren, aber es bricht auf halbem Wege
EDIT: Ich habe gerade bemerkt, es gibt Anzeigen auf der Website, die genau die gleiche Klasse teilen und sie haben offensichtlich nicht die Elemente, die ich brauche. Mehr Probleme zum Nachdenken.
var items1 = htmlDoc.DocumentNode.SelectNodes("//*[@class='item extend featured']");
foreach (var e in items1)
{
var test = e.SelectSingleNode(".//a[@target='_top']").InnerText;
Console.WriteLine(test);
}
var page = new HtmlDocument();
page.Load(path);
var lists = page.DocumentNode.SelectNodes("//li[@class='item extend featured']");
foreach(var list in lists)
{
var link = list.SelectSingleNode(".//*[@class='itemtitle']/a");
string title = link.GetAttributeValue("title", string.Empty);
string href = link.GetAttributeValue("href", string.Empty);
string km = list.SelectSingleNode(".//*[@class='title-km']").InnerText;
string year = list.SelectSingleNode(".//*[@class='title-year']").InnerText;
string price = list.SelectSingleNode(".//*[@class='title-price']").InnerText;
Console.WriteLine("Title: %s\r\n href: %s\r\n Title-km: %s\r\n Title-year: %s\r\n Title-Price: %s\r\n\r\n", title, href, km, year, price);
}
Was Sie erreichen möchten, erfordert mehrere XPath-Ausdrücke, da Sie mit einer Abfrage nicht mehrere Ergebnisse auf verschiedenen Ebenen zurückgeben können (es sei denn, Sie verwenden Union möglicherweise).
Was Sie vielleicht suchen, ist etwas Ähnliches:
var listItems = htmlDoc.DocumentNode.SelectNodes("//li[@class='item extend featured']");
foreach(var li in listItems) {
var title = li.SelectNodes("//h2/a/text()");
var href = li.SelectNodes("//h2/a/@href");
var title_km = li.SelectNodes("//div[@class='title-additional']/div[@class='title-km']/text()");
var title_... // other divs
}
Hinweis: Code nicht getestet