Manolo Martinez
Manolo Martinez

Reputation: 11

Looping a node collection gives me unique nodes but selecting nodes inside from these give me the results of the first loop item

Context: Using the HTMLAgilityPack library, im looping a HtmlNodeCollection, printing the HTML of the node gives me the data that I need, but when im selecting nodes inside the html, all of them gives me the result of the first item I selected nodes in.

Writing the nodes html as node.InnerHtml gives me the unique htmls of them, all correct, but when I do SelectSingleNode, all of them give me the same data.

Due to the project, I cannot disclose the website. What I can say is that theres 17 nodes, all of them are a div with the class k-user-item. All Items are unique, meaning they all are different.

Thanks for the help!

Code:

var nodes = w.DocumentNode.SelectNodes("//div[contains(@class, 'k-user-item')]");

List<Sales> saleList = new List<Sales>();

foreach (HtmlNode node in nodes)
{
    //This line prints correct html, selecting single nodes gives me always the same data of the first item from the loop.
    //Debug.WriteLine(node.InnerHtml);


    string payout = node.SelectSingleNode("//*[@class=\"k-item--buy-date\"]").InnerText;
    string size = node.SelectSingleNode("//*[@class=\"k-panel-title\"]").SelectNodes("//span")[1].InnerText;
    var trNodes = node.SelectNodes("//tr");

    string status = trNodes[1].SelectSingleNode("//b").InnerText;
    string orderId = trNodes[2].SelectNodes("//td")[1].SelectSingleNode("//span").InnerHtml;
    string sellDate = node.SelectSingleNode("//*[@class=\"k-panel-heading\"]").SelectNodes("//small")[1].InnerHtml;

}

Upvotes: 0

Views: 186

Answers (1)

Manolo Martinez
Manolo Martinez

Reputation: 11

This issue was solved by adding to the XPath a "." on to the start.

Not adding the dot onto the XPath means that the node will search in the whole document and not just the exact node html.

Upvotes: 0

Related Questions