2016-04-27 3 views
1

私はHTMLAgilityPackを使用してC#でアプリケーションを作成しています。<a>要素をxPathから削除するには?

私は次のHTMLの構造を有する:

<td colspan="3"> 
    <a href="tournament_detail.asp?EID=3">The North West Junior Champions League 2016</a> 
    <br> 
    St Bedes Sports Fields, Manchester. M21 0TT</td> 
</td> 

私はアドレスを引き出したいと思い、私は次のことを試してみました<a><br />

除く:

//div[@class='infobox']/table/tr/td[1][not a] 

Here is the site I am trying to pull data from

私はHTMLAgilityPackを使用していますので、string()関数を使用することはできません(または、試してみると少なくともatが例外になります)。 私はそれを使用できるかどうかの明確化を求めているので、これを重複としてマークしないでください。

どのようにしてアドレスだけを取り戻すことができますか?

+1

可能性のある重複した[tdからテキストを取得する方法Xpathを使用して生テキストとリンクの両方を含むノード](http://stackoverflow.com/questions/36836090/how-to-get-the-text-from-td-node-containg-both-raw-text-and- a-link-using-xpath) –

+0

@KeithHallコードにどのように適用されるかの関連する例を教えてください。 'string(// div [@ class = 'infobox']/table/tr/td [1])'を試しましたが、うまくいかないようです。 – SCGB

+0

@KeithHall展開するには、「式はノードセットに評価する必要があります」例外が表示されます。 – SCGB

答えて

3

述語を追加すると、XPathは、という要素を持たない<td>要素のみを返すようになりますが、これは望ましい結果ではありません。代わりに、選択した<td>から直接の子、非空のテキストノードを返される/text()[normalize-space()]を追加します。

var raw = @"<td colspan='3'> 
    <a href='tournament_detail.asp?EID=3'>The North West Junior Champions League 2016</a> 
    <br> 
    St Bedes Sports Fields, Manchester. M21 0TT</td>"; 
var doc = new HtmlDocument(); 
doc.LoadHtml(raw); 
var td = doc.DocumentNode.SelectSingleNode("//td/text()[normalize-space()]"); 
Console.WriteLine(td.InnerText.Trim()); 

出力:の

St Bedes Sports Fields, Manchester. M21 0TT 
関連する問題