C # + HTMLAgilityPack: recupera el valor de la url de fondo

c# css html-agility-pack

Pregunta

Voy a extraer el fondo de algunos archivos HTML y reemplazarlos con nuevos valores.
Para controlar si la etiqueta BODY tiene un fondo definido en su estilo como css, use el siguiente código:

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
  }

}

Mi problema es cómo recuperar el valor de la URL de fondo de dicha etiqueta de las propiedades de estilo:

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

y reemplazarlo con un nuevo valor como el siguiente:

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

Respuesta aceptada

Trate el código de abajo. Extraiga la url de la imagen de fondo (cadena entre paréntesis) con expresiones regulares y reemplácela con una nueva imagen. Ahora elimine el atributo de estilo y agregue nuevo (estilo con imagen reemplazada).

Esto funcionará con todos los valores y formatos de propiedades.

           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);
                }

            }

Respuesta popular

puede eliminar el estilo antiguo y agregar el nuevo estilo, por ejemplo:

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué