META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1" /> TITLE>Microsoft Corporation META http-equiv="PICS-Label" content="(PICS-1.1 "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0))" /> META NAME="KEYWORDS" CONTENT="products; headlines; downloads; news; Web site; what's new; solutions; services; software; contests; corporate news;" /> META NAME="DESCRIPTION" CONTENT="The entry page to Microsoft's Web site. Find software, solutions, answers, support, and Microsoft news." /> META NAME="MS.LOCALE" CONTENT="EN-US" /> META NAME="CATEGORY" CONTENT="home page" />
Ich würde gerne wissen, welche XPATH ich benötigen würde, um den Wert des Content-Attributs des Kategorie-Meta-Tags mit HTML Agility Pack zu erhalten. (Ich entfernte das erste <jeder Zeile im HTML-Code, damit es posten würde).
HtmlAgilityPack war lange Zeit nicht in der Lage, einen Attributwert direkt abzufragen . Sie mussten die Liste der Metaknoten durchlaufen. Hier ist eine Möglichkeit:
var doc = new HtmlDocument();
doc.LoadHtml(htmlString);
var list = doc.DocumentNode.SelectNodes("//meta");
foreach (var node in list)
{
string content = node.GetAttributeValue("content", "");
}
Aber es sieht so aus, als gäbe es eine experimentelle xpath-Version , mit der Sie das tun können.
doc.Document.SelectNodes("//meta/@content")
gibt eine Liste von HtmlAttribute-Objekten zurück.
Vielen Dank für die schnelle Antwort von Rohit Agarwal (ich habe die Antwort nur wenige Stunden nach meiner Anfrage gesehen, konnte sie aber erst heute testen).
Ich habe Ihren Vorschlag ursprünglich folgendermaßen umgesetzt (in vb.net)
Dim result As String = webClient.DownloadString(url) Dim doc As New HtmlDocument() doc.LoadHtml(result)
Dim list = doc.DocumentNode.SelectNodes("//meta")
Dim node As Object
For Each node In list
Dim metaname As String = node.GetAttributeValue("name", String.Empty)
If metaname <> String.Empty Then
If (metaname = "title") Then
title = node.GetAttributeValue("content", String.Empty)
//more elseif thens
End if
End if
Next (node)
Ich habe jedoch festgestellt, dass // meta [@ name = 'title'] das gleiche Ergebnis liefert
Dim result As String = webClient.DownloadString(url)
Doc als neues HTML-Dokument dimmen () doc.LoadHtml (Ergebnis)
title = doc.DocumentNode.SelectNodes ("// meta [@ name = 'title']") (0) .GetAttributeValue ("content", String.Empty)
Danke, dass du mich auf den richtigen Weg gebracht hast = D