Запрос XPATH, HtmlAgilityPack и извлечение текста - PullRequest
2 голосов
/ 06 июня 2010

Я пытался извлечь ссылки из класса с именем "tim_new". Мне тоже дали решение.

И решение, фрагмент и необходимая информация даны здесь

Указанный запрос XPATH был "//a[@class='tim_new'], мой вопрос: как этот запрос различал первую строку фрагмента (приведенную в ссылке выше и вторую строку фрагмента).

В частности, каков буквальный перевод (на английском языке) этого запроса XPATH.


Кроме того, я хочу написать несколько строк кода для извлечения текста, написанного для NSE:

<div class="FL gL_12 PL10 PT15">BSE: 523395 &nbsp;&nbsp;|&nbsp;&nbsp; NSE: 3MINDIA &nbsp;&nbsp;|&nbsp;&nbsp; ISIN: INE470A01017</div>

Буду признателен за помощь в формировании необходимого запроса выбора.

Мой код записан как:

IEnumerable<string> NSECODE = doc.DocumentNode.SelectSingleNode("//div[@NSE:]");

Но это выглядит не так. Был бы признателен за помощь.

1 Ответ

1 голос
/ 06 июня 2010

XPath в первом выделении читает «выбрать все элементы документа, которые имеют атрибут с именем class со значением tim_new». Содержимое в скобках - это не то, что вы возвращаете, это критерии, которые вы применяете для поиска.

У меня нет пакета Agility для HTML, но если вы пытаетесь запросить div, в качестве текста которого указано «NSE:», ваш XPath для второго запроса должен быть просто «// div», тогда хочу фильтровать с помощью LINQ.

Что-то вроде

var nodes = 
    doc.DocumentNode.SelectNodes("//div[text()]").Where(a => a.InnerText.IndexOf("NSE:") > -1);

Итак, на английском языке: «Верните все элементы div, которые сразу содержат текст, в LINQ, а затем убедитесь, что значение внутреннего текста содержит NSE:». Опять же, я не уверен, что синтаксис идеален, но это идея.

XPath "// div [@NSE:]" вернул бы все div, которые имеют и имеют атрибут NSE:, что в любом случае было бы недопустимым, поскольку ":" не допускается в имени атрибута. Вы ищете текст элемента, а не один из его атрибутов.

Надеюсь, это поможет. '

Примечание. Если у вас есть вложенные элементы div, содержащие оба текста, как в <div>NSE: some text<div>NSE: more text</div></div>, вы получите дублированные результаты.

...