XPATH как извлекать по одному td за раз из тела в HTML, используя пакет agility HTML - PullRequest
2 голосов
/ 05 марта 2011

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

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

Я пытаюсь извлечь только значения close в столбце 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 возвращает нулевой узел. Никогда не думал, что это займет так много времени.

Ответы [ 3 ]

3 голосов
/ 11 марта 2011

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

Посмотрите на следующий ответ здесь, на SO: Почему firebug добавляет к

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

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

0 голосов
/ 06 марта 2011

Есть много способов сделать это. Вот одно решение, которое основано на 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);
}
0 голосов
/ 05 марта 2011

XPath для первой ячейки в столбце «Закрыть» равно //div[@id='prices']/table/tbody/tr[2]/td[5], для второй - //div[@id='prices']/table/tbody/tr[3]/td[5] и т. Д.

...