У меня есть серия HTML-файлов, в которых имена авторов делятся на имена и фамилии, содержащиеся в метатегах.
Моя текущая HTML-структура выглядит следующим образом. Я хочу правильно извлечь имена и фамилии авторов, чтобы использовать эти данные для индексации этих HTML-файлов. Количество авторов может варьироваться в зависимости от HTML-документов.
<!doctype html>
<html lang="en">
<head>
<title>Title of document</title>
<meta charset="utf-8" />
<meta name="dcterms.title" content="The science papers title" />
<meta name="author" />
<meta name="firstname" content="Eddard" />
<meta name="lastname" content="Stark" />
<meta name="author" />
<meta name="firstname" content="Tywin" />
<meta name="lastname" content="Lannister" />
<meta name="author" />
<meta name="firstname" content="Jon" />
<meta name="lastname" content="Snow" />
<meta name="dcterms.subject" content="The articles subject" />
<meta name="description" content="The articles description, abstract or introduction" />
<meta name="keywords" content="keyword1, keyword2, keyword3" />
</head>
Я использую C # и XPath для очистки этих данных, пытаясь выяснить, как получить правильные данные. Моя проблема в том, что я не могу понять, как извлечь метаданные и сделать так, чтобы я мог использовать каждую строковую переменную для генерации XML позже.
var author_1: Eddard Stark
var author_2: Tywin Lannister
var author_3: Jon Snow
Мой текущий тестовый стенд C # с XPaths.
var url = "<URL TO DOCUMENT>";
var web = new HtmlWeb();
var doc = web.Load(url);
var navigator = (HtmlAgilityPack.HtmlNodeNavigator)doc.CreateNavigator();
// Xpaths
var authors_list = doc.DocumentNode.SelectSingleNode("//meta[@name='author']");
var authors_FirstName = "//meta[@name='author']/following::meta[1]/@content";
var authors_LastName = "//meta[@name='lastname']/@content";
// Laboratory
var listOfAuthorsXpath = "//meta[@name='author']/following::meta[1]/@content";
var nodes = doc.DocumentNode.SelectNodes(listOfAuthorsXpath);
// SelectNodes
var firstName = navigator.SelectSingleNode(authors_FirstName);
var lastName = navigator.SelectSingleNode(authors_LastName);
// Print to screen
Console.WriteLine(firstName.Value + " " +lastName.Value);
//Console.WriteLine(doc.DocumentNode.InnerHtml);
Console.ReadKey();