Выражение XPath не работает в HtmlAgilityPack

c# html-agility-pack xpath

Вопрос

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

У меня есть веб-сайт и хочу получить новости из него: www.farsnews.com (это персидский)

Используя FireBug и FireXpath расширения в firefox и вручную, я извлекаю и тестирую несколько выражений Xpath, которые соответствуют заголовкам, например:

* html/body/div[2]/div[2]/div[2]/div[*]/div[2]/a/div[2]
* .//*[@class="topnewsinfotitle "]
* .//div[@class="topnewsinfotitle "]

Я также тестировал их с помощью расширения XPather, и они, похоже, работают очень хорошо, но когда я их тестирую ... SelectNodes возвращает null!

Любая подсказка или подсказка?

вот кусок кода:

listBox2.ResetText();

HtmlAgilityPack.HtmlWeb w = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = w.Load("http://www.farsnews.com");
HtmlAgilityPack.HtmlNodeCollection nc = doc.DocumentNode.SelectNodes(".//div[@class=\"topnewsinfotitle \"]");

listBox2.Items.Add(nc.Count+" Items selected!");

foreach (HtmlAgilityPack.HtmlNode node in nc) {
            listBox2.Items.Add(node.InnerText);
        }

Благодарю.

Популярные ответы

Я проверил ваши выражения. И, как упоминалось в диалекте в комментарии, у вас есть конечное пространство, которое не должно быть там.

//div[@class='topnewsinfotitle ']/text()

Возвращает «пустую последовательность», см. Оценку: http://xmltools.dk/EQA-ACA6

//div[@class='topnewsinfotitle']/text()

Возвращает список заголовков, см .: http://xmltools.dk/EgA2APAj

Однако, если могут быть другие классы, вы используете это ( http://xmltools.dk/EwA8AJAW ):

//div[contains(@class, 'topnewsinfotitle')]/text()

(Я вижу, что это проблема кодирования в ссылках, которые я предоставил, однако это не имеет значения для значения и для всех выражений XPath, вы можете удалить /text() чтобы получить узлы, а не только текст)

НО, если вы владеете этим сайтом, вы должны предоставить заголовки XML (возможно, RSS или ATOM) или JSON, которые будут иметь лучшую производительность и, самое главное, быть более пуленепробиваемыми.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему