Извлечение данных из файла HTML с помощью скрипта c# - PullRequest
1 голос
/ 05 мая 2020

Что мне нужно сделать : извлечь (информацию об отправителях, получателях, Cc и теме) и удалить их из файла HTML. Без использования какой-либо третьей стороны (HTMLAgilityPack, et c)

С чем у меня возникли проблемы : Каким будет мой подход, чтобы получить следующее ( from, to, subject, cc) из тегов html?

Шаги, которые я пробовал: Я пытался получить индекс <p class=MsoNormal> и последний индекс электронного письма @ sampleemail.com, но я думаю, что это плохой подход , так как в некоторых файлах html будет много «<p class=MsNormal>», что касается удаления from, to, cc и темы, я просто использовал строку.Remove (indexOf, Я посчитал символы от indexOf до lastIndexOf ), и она сработала

Пример тега, содержащего информацию из:

<p class=MsoNormal style='margin-left:120.0pt;text-indent:-120.0pt;tab-stops:120.0pt;mso-layout-grid align:none;text-autospace:none'><b><span style='color:black'>From:<span style='mso-tab-count:1'></span></span></b><span style='color:black'>1234@sampleemail.com<o:p></o:p></span></p>                                     

HTML ФАЙЛОВЫЙ вывод:

HTML File output

1 Ответ

2 голосов
/ 05 мая 2020

HTMLAgilityPack - ваш друг. Просто используя XPath, например //p[@class ='MsoNormal'], чтобы получить содержимое тегов в HTML

public static void Main()
{
    var html =
    @"<p class=MsoNormal style='margin-left:120.0pt;text-indent:-120.0pt;tab-stops:120.0pt;mso-layout-grid align:none;text-autospace:none'><b><span style='color:black'>From:<span style='mso-tab-count:1'></span></span></b><span style='color:black'>1234@sampleemail.com<o:p></o:p></span></p>                                     ";

    var htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(html);

    var nodes = htmlDoc.DocumentNode.SelectNodes("//p[@class ='MsoNormal']");

    foreach(var node in nodes)
        Console.WriteLine(node.InnerText);      
}

Результат:

From:1234@sampleemail.com

Обновление

Мы можем использовать Regex для написания этого простого парсера. Но помните, что он не может очистить все регистры для сложного html документа .

    public static void MainFunc()
    {
        string str = @"<p class='MsoNormal' style='margin-left:120.0pt;text-indent:-120.0pt;tab-stops:120.0pt;mso-layout-grid align:none;text-autospace:none'><b><span style='color:black'>From:<span style='mso-tab-count:1'></span></span></b><span style='color:black'>1234@sampleemail.com<o:p></o:p></span></p>                                     ";
        var result = Regex.Replace(str, "<(?:\"[^\"]*\"['\"]*|'[^']*'['\"]*|[^'\">])+>", "");
        Console.WriteLine(result);
    }

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...