Ich arbeite seit einiger Zeit mit einem Knoten, der in C # / html agility pack eingestellt ist, und durch Versuch und Irrtum habe ich eine Liste von Knoten, die ich überschleifen möchte, um die Kindknoten von jedem der Knoten aus der Schleife zu bekommen. Ich würde gerne auf sie nach Index # verweisen (scheint am einfachsten zu sein, aber hier poste ich). Ich habe verschiedene Wege ausprobiert, um den XPath zu formatieren, darunter "[0]", "/ [0]", "tr / [0]" usw. Hier ist was ich bisher gemacht habe, alles funktioniert bis zum ersten Kommentar Linie:
protected override List<IDataPoint> ReturnDataPointsFromIndividualAddressString(string AddressString)
{
List<IDataPoint> earningsAnnouncements = new List<IDataPoint>();
HtmlWeb hwObject = new HtmlWeb();
HtmlDocument htmlDoc = hwObject.Load(AddressString);
if (htmlDoc.DocumentNode != null)
{
List<HtmlNode> nodeList = new List<HtmlNode>();
var nodes = htmlDoc.DocumentNode.SelectNodes("html[1]/body[1]/table[4]/tr[1]/td[1]/table[1]/tr");
if (nodes != null)
{
foreach (HtmlNode n in nodes)
{
if (n.OuterHtml.Contains("finance.yahoo.com"))
nodeList.Add(n);
}
}
foreach (HtmlNode node in nodeList)
{
EarningsAnnouncementDP earningsAnnouncement = new EarningsAnnouncementDP();
//Error: Expression must evaluate to a node set.
earningsAnnouncement.Company = (node.SelectSingleNode("[0]")).InnerText.ToString();
earningsAnnouncement.Ticker = node.SelectSingleNode("[1]").InnerText.ToString();
earningsAnnouncement.Estimate = node.SelectSingleNode("[2]").InnerText.ToString();
earningsAnnouncement.AnnouncementTime = node.SelectSingleNode("[3]").InnerText.ToString();
earningsAnnouncements.Add(earningsAnnouncement);
}
return earningsAnnouncements;
}
Sie haben bis überquert tr
Knoten. Jetzt sollten Sie auf den Knoten td
zugreifen. Sie können den XPATH
wie XPATH
.
node.SelectSingleNode("./td[1]").InnerText;
node.SelectSingleNode("td[1]").InnerText;
Auch auf den ersten td
Knoten wird als td[1]
und nicht als td[0]
zugegriffen.
Als Alex darauf hingewiesen hat, kannst du etwas wie unten schreiben, was ein ausgezeichneter Vorschlag ist.
node.ChildNodes[0].InnerText
HTH