2017-05-07 14 views
0

私はそれらのすべてがこのような構造持って、私は10個のリンクを持っている
このような構造を持つすべての要素を見つけるしたい
C#でのXPathに問題がいる:
HTML XPathは、クラス名による検索

<div class="PartialSearchResults-item" data-zen="true"> 
<div class="PartialSearchResults-item-title"> 
<a class="PartialSearchResults-item-title-link result-link"target="_blank" href='https://www.google.com/'> Google</a> 
    </div> 
<p class="PartialSearchResults-item-url">www.google.com</p> 
<p class="PartialSearchResults-item-abstract">Search the world.</p> 
    </div> 

をたとえば、このサンプルでは、​​「Google」と「www.google.com」と「Search the world」を取得したいと考えています。

var titles = hd.DocumentNode.SelectNodes("//div[contains(@class, 'PartialSearchResults-item')]"); 
string link; 
foreach (HtmlNode node in titles){ 
string description = node.SelectSingleNode(".//*[contains(@class,'PartialSearchResults-item-abstract')]").InnerText; 

link = node.SelectSingleNode(".//*[contains(@class,'PartialSearchResults-item-url')]").InnerText; 

string title = node.SelectSingleNode(".//a[contains(@class,'PartialSearchResults-item-title-link result-link')]").InnerText;} 

しかし、私はこの問題は、あなたがtitlesを取得しているクエリであるエラーnull参照に

答えて

2

を取得します。あなたはclass属性のPartialSearchResults-itemを含むdivを探しています。これはあなたの商品のルートノードです。しかし、クエリーを満たす他のノードもあります。たとえば、PartialSearchResults-item-titleというクラスのdivもクエリを満たしています。次に、この2つのdivを選択した後、それらを反復処理し、子ノードを取得しようとすると、最初の反復でコードは正常に機能しますが、2番目の反復ではクラス、あなたが説明を照会しているときに、私はcontainsを使用しないようにお勧めしnullオブジェクト

string description = node.SelectSingleNode(".//*[contains(@class,'PartialSearchResults-item-abstract')]").InnerText; 

InnerTextプロパティの値を取得しようとしているので、あなたが、2回目の反復でNullReferenceExceptionを取得しますので。あなたはあなたのソリューションが正しいですが、私はまた、クラス名 `PartialSearchResults項目で、同じポイントで、私の場合にはこだわってこの

var titles = hd.DocumentNode.SelectNodes("//div[@class='PartialSearchResults-item']"); 
+0

のようにそれを照会することができますので、あなたのケースでは、あなたのルートノードは、ただ一つのクラスPartialSearchResults-itemを持っています'(例えば。)私は他のクラスも持っています。この構文を使用するために 'var titles = hd.DocumentNode.SelectNodes(" // div [@ class = 'PartialSearchResults-item'] ");' を使用して結果を得ることができません。すべてのクラス名を付ける必要があります一緒に固定されません。 – Divya