C # + HTMLAgilityPack : 배경 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
  }

}

내 문제는 어떻게 스타일 속성에서 같은 태그 배경 URL 값을 retrive 것입니다 :

<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
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.