2010-08-28 3 views
3

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

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

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

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

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

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

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

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); 
     } 

Спасибо.

+0

Должно ли название HTML-класса содержать пробел в конце? Возвращает ли SelectNodes значение null для каждого случая, даже самого тривиального? – Dialecticus

ответ

4

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

//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() 

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

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

Смежные вопросы