2016-04-23 3 views
2

Ich habe Dateien Listennamen html wie folgt aus:Angebote: Alle inntertext haben benutzerdefinierte Präfix HtmlAgilityPack

<tr> 
<td>ABC.rar</td> 
<td>XYZ.zip</td> 
<td>DEF.MP4</td> 
</tr> 

Wie i-Datei nicht finden kann ABC.rar fügen Sie einfach Präfix ABC

string innerText = document2.DocumentNode.SelectSingleNode("//td[2]//a[.='ABC']").InnerText; 
+0

Ihr Regex sollte '/ ([A-Z] + \. Rar)/g' sein – Shayan

+0

@shayanypn Das ist nicht Regex, es ist XPATH. –

Antwort

4

Es ist nicht klar, Warum gibt es a in Ihrem Versuch XPath, während es kein <a> Element im HTML-Beispiel gibt. Wie auch immer, sind die folgenden zwei mögliche XPath <td> zu finden, das Schlüsselwort enthält 'ABC':

//td[contains(.,'ABC')] 
//td[starts-with(.,'ABC')] 

Unterschied zwischen den beiden sollte eine klare Funktionsnamen gegeben selbsterklärend sein verwendet. Wenn ich verstehe, was Sie unter Präfix richtig verstehen, vermute ich starts-with() wäre hier besser im Vergleich zu .


Demo:

var html = @"<tr> 
<td>ABC.rar</td> 
<td>XYZ.zip</td> 
<td>DEF.MP4</td> 
</tr>"; 

var document2 = new HtmlDocument(); 
document2.LoadHtml(html); 
string innerText = document2.DocumentNode 
          .SelectSingleNode("//td[starts-with(.,'ABC')]") 
          .InnerText; 
Console.WriteLine(innerText); 

dotnetfiddle demo

output:

ABC.rar 
+0

was der Punkt bedeutet? –

+0

@AvinashRaj '.' verweist auf den aktuellen Kontextknoten, in diesem Fall auf den' td', der implizit verwendet wird, wenn er in einer Zeichenfolgenoperation wie 'contains()' oder 'starts-with()' verwendet wird in String konvertiert, als ob die 'string()' -Funktion – har07

+0

genannt wurde, nachdem ich deinen Code hinzugefügt habe, zeige Fehler: Objektreferenz nicht auf eine Instanz eines Objekts gesetzt –

Verwandte Themen