XPATH HTMLアジリティーパックを使用してtbodyから一度に1つのtdを抽出する方法

html html-agility-pack xpath

質問

私は下のURL(Google財務)からテーブルを解析しようとしています

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

私は近い列で近い値だけを抽出しようとしています。しかし、私がXPATHを試してみると

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

1つのNode.innerText自体に、属性のクラスと属性としてrgtの属性を持つすべてのノードを取得しています。

私は値を1つずつ必要とし、同時にすべてではありません。私はここで何か愚かなことをしているに違いない。ありがとうございました。

Firebugを使用して検出された実際のXPathは次のとおりです

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

しかし、フォームタグの後のいくつかの方法... HTMLagilityパックはnullノードを返しています。これが実現するのにずっと時間がかかるとは思わなかった。

受け入れられた回答

FirebugFirefox拡張機能( XPatherなど )を使って解析する要素のXPathを取得する場合は、 tbodyタグをXPathから削除する必要があります。

それでは、以下の答えを見てください: なぜfirebugが<tbody>を<table>に追加しますか?

HtmlAgilityPackを使用している場合は、解析しているHTMLソースがFirefoxのHTMLソースと異なる可能性があるため、 FirebugまたはFirefoxに関連する他のツールによって返されたXPathが異なる場合があります。

Internet Explorer 8で同じページを開いて開発ツール(F12)を使用するのがFirebugでやっているのと同じ操作をする場合や、そうでない場合は、 HtmlAgilityPackページからダウンロードできるHAP Explorerなどの別のツールを使用することがあります


人気のある回答

それを行うには多くの方法があります。ここでは、Data td(lmクラスの1つ)に基づいた1つの解決策があります。

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