C # + HTMLAgilityPack: retrive background-url value

c# css html-agility-pack

Domanda

Ho intenzione di estrarre lo sfondo di alcuni file HTML e sostituirli con nuovi valori.
Per controllare se il tag BODY ha lo sfondo definito nel suo stile come css ho usato sotto il codice:

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
  }

}

il mio problema è come recuperare il valore di background-url da tale tag dalle proprietà di stile:

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
  }

}

e sostituirlo con un nuovo valore come di seguito:

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
  }

}

Risposta accettata

Prova il codice qui sotto. Estrai url di background-image (stringa tra parentesi) con regex e sostituiscilo con una nuova immagine. Ora rimuovi l'attributo style e aggiungi new (stile con immagine sostituita).

Funzionerà con tutti i valori e i formati delle proprietà.

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

            }

Risposta popolare

puoi rimuovere il vecchio stile e aggiungere il nuovo stile per esempio:

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché