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" />
Я хотел бы знать то, что XPath я должен буду получить значение атрибута Содержания метатега Категории с помощью Пакета Гибкости HTML. (Я удалил первое <каждой строки в HTML-коде, таким образом, это отправит).
Долгое время в HtmlAgilityPack не было возможности прямого запроса значения атрибута. Приходилось перебирать список мета-узлов. Вот один из способов -
var doc = new HtmlDocument();
doc.LoadHtml(htmlString);
var list = doc.DocumentNode.SelectNodes("//meta");
foreach (var node in list)
{
string content = node.GetAttributeValue("content", "");
}
Но похоже, что в экспериментальном выпуске xpath, который позволит вам это сделать.
doc.Document.SelectNodes("//meta/@content")
вернет список объектов HtmlAttribute.
Спасибо за быстрый ответ Rohit Agarwal (я увидел ответ только через несколько часов после моего вопроса, но не смог проверить его до сегодняшнего дня).
Изначально я реализовал ваше предложение следующим образом (это в 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)
Однако, я обнаружил, что //meta[@name='title'] даст мне тот же результат
Dim result As String = webClient.DownloadString(url)
Dim doc As New HtmlDocument() doc.LoadHtml(result)
title = doc.DocumentNode.SelectNodes("//meta[@name='title']")(0).GetAttributeValue("content", String.Empty)
Спасибо, что направили меня на правильный путь=D