Xpath HTML. Возвращает null - C#

314
16 июня 2017, 07:32
<div class="clearfix">
   <i class="_2m_3 _3-91 _8o _8s lfloat _ohe img sp_sJ1LAYlqgzt sx_2abc43"></i>
   <div class="_42ef">
      <div>
         <div class="_50f3">Живет в <a class="profileLink" href="https://www.facebook.com/pages/%D0%9B%D0%BE%D1%81-%D0%90%D0%BD%D0%B4%D0%B6%D0%B5%D0%BB%D0%B5%D1%81/110970792260960?ref=br_rs" data-hovercard="/ajax/hovercard/page.php?id=110970792260960" data-hovercard-prefer-more-content-show="1">Лос-Анджелес</a>
         </div>
         <span class="_50f8"></span>
         </div>
    </div>
</div>

Мне нужно от сюда сохранить "Живёт в" и "Лос-Анджелес". Делаю так, но var text1 и var text2 всегда null. В чём проблема?

HtmlAgilityPack.HtmlDocument HD = new HtmlAgilityPack.HtmlDocument();
HD.LoadHtml(sourceCode);
var text1 = HD.DocumentNode.SelectNodes("//div[@class='_42ef']/div/div[@class='_50f3']/text()");
var text2 = HD.DocumentNode.SelectNodes("//div[@class='_42ef']/div/div[@class='_50f3']/a");

Я кажется понял в чём дело. Нужная часть кода находится между тегами <!-- -->. Регулярками я сохранил то что записано в тегах и добавил <!DOCTYPE html> к началу полученной строки. И всё заработало

Answer 1

Небольшое отступление. Написано по размышлениям над комментариями к ответу.

HTML - не является XML-документом. Поэтому парсить его при помощи XML-парсеров - некорректно. Используйте для этого HTML-парсеры или на крайний случай регулярные выражения.

Можно прочитать весь текст и потом уже с ним работать. Названия классов, как я понимаю, могут поменяться. Да и структура тоже.

string content = ...; //текст html 
var reader = new StringReader(content);
XPathDocument doc = new XPathDocument(reader);
var nav = doc.CreateNavigator();
foreach (XPathNavigator n in nav.Select("div"))
{
    Console.WriteLine(n.Value);
}

Выведет: Живет в Лос-Анджелес

READ ALSO
Best practices по использованию дублирующейся логики для контролов (WinForms) C#

Best practices по использованию дублирующейся логики для контролов (WinForms) C#

Подскажите, пожалуйста, как лучше сделатьСитуация следующая: Допустим, имеется две кнопки на двух разных вкладках (TabControl) предназначенных...

317
Не получаеться скачать картинку C#

Не получаеться скачать картинку C#

Нашел много всяких вопросов на эти темы но не один мне не помогаетВозьмем картинку которую я получаю с помощью vk api https://pp

305
c# Ссылка на объект [дубликат]

c# Ссылка на объект [дубликат]

На данный вопрос уже ответили:

358