XPATH, как извлечь один td за один раз из tbody в HTML, используя пакет гибкости HTML

html html-agility-pack xpath

Вопрос

Я пытаюсь проанализировать таблицу из URL (Google finance) ниже

http://www.google.com/finance/historical?q=BOM:533278

Я пытаюсь извлечь только закрытые значения в столбце close . Но когда я пытаюсь использовать XPATH

hd.DocumentNode.SelectSingleNode("//td[@class='rgt']")

Я получаю все узлы наличия атрибута как класса и значения атрибута как rgt в одном самом узле Node.innerText .

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

Фактический XPath, найденный с использованием Firebug, следующий

/html/body/div/div/div[3]/div[2]/div/div[2]
     /div[2]/div/form/div[2]/table/tbody/tr[2]/td[5]

Но некоторые, как после тега формы ... HTMLagility pack возвращает нулевой узел. Никогда не думал, что это займет так много времени.

Принятый ответ

Если вы используете Firebug или любое расширение Firefox (например, XPather ), чтобы получить XPath из элементов, которые нужно проанализировать, вам может потребоваться удалить теги tbody из XPath.

Взгляните на следующий ответ здесь: SO: Почему firebug добавляет <tbody> в <table>?

Если вы используете HtmlAgilityPack , XPath возвращаемый Firebug или любым другим инструментом, связанным с Firefox, может отличаться, потому что исходный HTML-код, который вы обрабатываете, может отличаться от источника HTML в Firefox .

Иногда бывает полезно открыть одну и ту же страницу в Internet Explorer 8, а использование инструментов разработчика (F12) сделает то же самое, что вы делаете с Firebug, или если нет, используйте другой инструмент, например HAP Explorer, который можно загрузить с страницы HtmlAgilityPack


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

Есть много способов сделать это. Вот одно решение, основанное на Data td (с классом «lm»):

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
... load the doc ...

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//td[@class='lm']/../td[5]"))
{
    Console.WriteLine("node=" + node.InnerText);
}


Related

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