Как обновить атрибут стиля HTML - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть приложение ac # .net core 2.2, которое я пытаюсь проанализировать HTML-страницу и отредактировать некоторые атрибуты стиля.

Я использую HTML Agility Pack

В своем HTML-коде яУ меня есть идентификатор, который имеет несколько стилей.

<td id="bannerTop" class="alert alert-warning" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 16px; vertical-align: top; color: #fff; font-weight: 500; text-align: center; border-radius: 3px 3px 0 0; background-color: #FF9F00; margin: 0; padding: 20px;" align="center" bgcolor="#FF9F00" valign="top">

Я хочу назвать этот элемент "bannerTop" и отредактировать стиль фона color

var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(selectedTemplate.HtmlTemplateString);

var bannerTop = htmlDoc.GetElementbyId("bannerTop");
bannerTop.Attributes["style"].Value = "background-color: #0000FF";

Но это перезаписывает все атрибуты стиля, какя могу просто отредактировать один из них?Нужно ли выполнять ручной анализ строки, возвращаемой bannerTop.Attributes["style"], или существует более простой способ, с помощью которого HTML Agility Pack позволяет редактировать отдельный стиль?

1 Ответ

0 голосов
/ 29 апреля 2019

Вам нужно извлечь стили из атрибута, а затем зациклить их, чтобы вручную изменить конкретный элемент стилей.

Я бы разделил на ";" затем ":", чтобы получить пары имя / значение. Зацикливание над ними, строчные буквы имени и изменить значение, если оно соответствует bgcolor. В противном случае добавьте исходное значение к newStyles.

var bannerTop = htmlDoc.GetElementbyId("bannerTop");
string oldStyle = bannerTop.Attributes["style"].Value;
string newStyles = "";
foreach (var entries in oldStyle.Split(';'))
{
    var values = entries.Split(':');
    if (values[0].ToLower() == "bgcolor")
    {                                                                   
        values[1] = "#0000FF";
        newStyles += String.Join(':', values) + ";";
    }
    else
    {
        newStyles += entries + ";";
    }

}

bannerTop.Attributes["style"].Value = newStyles;
...