2016-04-27 2 views
1

Ich mache eine Anwendung in C# mit HTMLAgilityPack.Wie entfernt man <a> Elemente von xPath?

Ich habe die folgende HTML-Struktur:

<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> 

Ich möchte die Adresse ziehen, die <a> und ich folgendes versucht <br />

ohne:

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

Here is the site I am trying to pull data from

Ich benutze HTMLAgilityPack, daher glaube ich nicht, dass ich die Funktion string() verwenden kann (oder zumindest bekomme ich eine Ausnahme, wenn ich es versuche). Bitte markieren Sie dies nicht als Duplikat, da ich um Klärung ersuche, ob ich das verwenden kann.

Wie kann ich nur die Adresse zurückziehen?

+1

Mögliches Duplikat [Wie den Text von td erhalten Knoten, der sowohl Rohtext als auch eine Verknüpfung mit Xpath enthält] (http://stackoverflow.com/questions/36836090/how-to-get-the-text-from-td-node-containg-both-raw-text-and- a-link-using-xpath) –

+0

@KeithHall Können Sie mir ein relevantes Beispiel geben, wie dies für meinen Code gelten würde? Ich versuchte 'string (// div [@ class = 'infobox']/table/tr/td [1])' aber es scheint nicht zu funktionieren. – SCGB

+0

@KeithHall Um zu erweitern, erhalte ich eine Ausnahme "Ausdruck muss zu einem Knotensatz auswerten". – SCGB

Antwort

3

Hinzufügen von Prädikat [not(a)] würde dazu führen, dass der XPath nur <td> Element zurückgibt, das kein Kind <a> hat, was nicht das gewünschte Ergebnis ist. Stattdessen fügen /text()[normalize-space()] den direkte Kind, nicht leeren Textknoten aus den ausgewählten <td> zurück:

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()); 

Ausgang:

St Bedes Sports Fields, Manchester. M21 0TT 
Verwandte Themen