C # + HTMLAgilityPack: вернуть значение background-url

c# css html-agility-pack

Вопрос

Я собираюсь извлечь фон из некоторых файлов HTML и заменить их новыми значениями.
Чтобы контролировать, если тег BODY получил фон, определенный в его стиле как css, который я использовал под кодом:

foreach (HtmlNode bodyNode in doc.DocumentNode.SelectNodes("//body"))
{
  if (bodyNode.Attributes.Contains("style") && bodyNode.Attributes["style"].Value.Replace(" ","").Contains("background-image:url"))
  {
    //code to replace background-url
  }

}

моя проблема заключается в том, как извлечь значение background-url из такого тега из свойств стиля:

<body style="background-image: url('test/bg.jpg')" >

и замените его новым значением, как показано ниже:

<body style="background-image: url('new value')" >

Принятый ответ

Попробуйте код ниже. Извлеките URL-адрес фонового изображения (строка между скобками) с помощью регулярного выражения и замените его новым изображением. Теперь удалите атрибут стиля и добавьте новый (стиль с замененным изображением).

Это будет работать со всеми значениями и форматами свойств.

           foreach (HtmlNode bodyNode in doc.DocumentNode.SelectNodes("//body"))
            {
                string newImg = "new-value.png";
                if (bodyNode.Attributes.Contains("style") && bodyNode.Attributes["style"].Value.Contains("background-image:url"))
                {                     
                    string style = bodyNode.Attributes["style"].Value;
                    string oldImg = Regex.Match(style, @"(?<=\().+?(?=\))").Value;
                    string oldStyle = bodyNode.Attributes["style"].Value;
                    string newStyle = oldStyle.Replace(oldImg, newImg);

                    bodyNode.Attributes.Remove("style");
                    bodyNode.Attributes.Add("style", newStyle);
                }

            }

Популярные ответы

вы можете удалить старый стиль и добавить новый стиль, например:

bodyNode.Attributes.Remove("style");
bodyNode.Attributes.Add("style", "width:95%;background-image: url('test/bg1.jpg');font-size:xx-large;text-align:center");


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему