Je vais extraire l'arrière-plan de certains fichiers HTML et les remplacer par de nouvelles valeurs.
Afin de contrôler si la balise BODY a un fond défini dans son style, css, je l’utilise en dessous du code:
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
}
}
mon problème est de savoir comment récupérer la valeur background-url d'une telle balise à partir de propriétés de style:
<body style="background-image: url('test/bg.jpg')" >
et remplacez-le par une nouvelle valeur comme ci-dessous:
<body style="background-image: url('new value')" >
Essayez le code ci-dessous. Extrayez l'url de l'image d'arrière-plan (chaîne entre crochets) avec l'expression rationnelle et remplacez-le par la nouvelle image. Maintenant, supprimez l'attribut de style et ajoutez-en un nouveau (style avec l'image remplacée).
Cela fonctionnera avec toutes les valeurs et tous les formats de propriétés.
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);
}
}
vous pouvez supprimer l'ancien style et ajouter le nouveau style, par exemple:
bodyNode.Attributes.Remove("style");
bodyNode.Attributes.Add("style", "width:95%;background-image: url('test/bg1.jpg');font-size:xx-large;text-align:center");