SelectSingleNode возвращает неверный результат при foreach

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(content);

var nodes = doc.DocumentNode.SelectNodes("//div[@class=\"noprint res\"]/div");
if (nodes != null)
{
    foreach (HtmlNode data in nodes)
    {
                  // Works but not what I want
                  MessageBox.Show(data.InnerHtml);

                  // Should work ? but does not ?
                  MessageBox.Show(data.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);
    }
}

Я пытаюсь проанализировать результаты HTML, начальный узел foreach работает так, как и ожидалось, и дает мне результат из 10 элементов, который соответствует тому, что мне нужно.

Когда я попадаю в foreach, если я вывожу внутренний html элемента данных, он отображает правильные данные, но если я вывожу SelectSingleNode, он всегда будет отображать данные из первого элемента из foreach, это то, что нормальное поведение или я что-то не так делаю?

Чтобы решить эту проблему, мне пришлось создать новый html внутри foreach для каждого элемента данных следующим образом:

HtmlAgilityPack.HtmlDocument innerDoc = new HtmlAgilityPack.HtmlDocument();
innerDoc.LoadHtml(data.InnerHtml);

// Select what I need
MessageBox.Show(innerDoc.DocumentNode.SelectSingleNode("//span[@class=\"pp-place-title\"]").InnerText);

Затем я получаю правильные данные для каждого элемента.

Страница, с которой я пытался получить данные, была http://maps.google.com/maps?q=consulting+loc:+US, если вы хотите попробовать и сами посмотреть, что получится. .

В основном я читаю названия компаний в левой колонке, и происходит вышеописанное.

6
задан Guapo 15 May 2012 в 10:39
поделиться