2

「tim_new」というクラスからリンクを抽出しようとしていました。私も解決策を与えられました。

ソリューション、スニペット、および必要な情報の両方がここに記載されています

上記の XPATH クエリは でした"//a[@class='tim_new']。私の質問は、このクエリがスニペットの最初の行 (上記のリンクとスニペットの 2 行目) をどのように区別したかです。

より具体的には、この 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:]");

しかし、これは正しく見えません。助けていただければ幸いです。

4

1 に答える 1

1

最初の選択のXPathは、「tim_newの値を持つclassという名前の属性を持つすべてのドキュメント要素を選択する」と表示されます。括弧内のものは、返されるものではなく、検索に適用する基準です。

HTML Agilityパックを持っていませんが、テキストとして「NSE:」を含むdivをクエリしようとしている場合、2番目のクエリのXPathは「//div」である必要があります。 LINQを使用します。

何かのようなもの

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

したがって、英語では、「テキストをすぐに含むすべてのdiv要素をLINQに返し、内部のテキスト値にNSEが含まれていることを確認してください:」。繰り返しますが、構文が完璧かどうかはわかりませんが、それがアイデアです。

XPath "// div [@NSE:]"は、NSE:という名前の属性を持つすべてのdivを返します。これは、属性名に ":"が許可されていないため、とにかく違法です。属性の1つではなく、要素のテキストを探しています。

お役に立てば幸いです。」

注:ネストされたdivがあり、両方にテキストが含まれている<div>NSE: some text<div>NSE: more text</div></div> 場合は、重複した結果が得られます。

于 2010-06-06T17:55:51.483 に答える