HtmlAgilityPack을 사용하여 속성 제거

html html-agility-pack html-parsing

문제

HtmlAgilityPack을 사용하는 태그와 상관없이 모든 style 속성을 제거하는 코드 스 니펫을 만들려고합니다.

내 코드는 다음과 같습니다.

var elements = htmlDoc.DocumentNode.SelectNodes("//*");

if (elements!=null)
{
    foreach (var element in elements)
    {
        element.Attributes.Remove("style");
    }
}

그러나, 나는 그것을 집어 넣지 않을거야? Remove("style") 바로 뒤에 element 객체를 보면. 스타일 속성 이 제거 되었지만 여전히 DocumentNode 객체에 나타나는 것을 볼 수 있습니다. : /

좀 바보 같아 보이지만 내게는 떨어져있는 것 같아? 누구든지 HtmlAgilityPack을 사용하여이 작업을 수행 했습니까? 감사!

최신 정보

내 코드를 다음과 같이 변경하고 제대로 작동합니다.

public static void RemoveStyleAttributes(this HtmlDocument html)
{
   var elementsWithStyleAttribute = html.DocumentNode.SelectNodes("//@style");

   if (elementsWithStyleAttribute!=null)
   {
      foreach (var element in elementsWithStyleAttribute)
      {
         element.Attributes["style"].Remove();
      }
   }
}

수락 된 답변

코드 스 니펫이 올바른 것 같습니다. 속성을 제거합니다. 문제는, DocumentNode .InnerHtml (이 속성을 모니터링한다고 가정)은 복잡한 속성입니다. 아마도 알 수없는 상황에서 업데이트 될 수 있습니다. 실제로이 속성을 사용하여 문서를 문자열로 가져 오면 안됩니다. 대신 그것의 HtmlDocument.Save 방법이 :

string result = null;
using (StringWriter writer = new StringWriter())
{
    htmlDoc.Save(writer);
    result = writer.ToString();
}

이제 result 변수는 문서의 문자열 표현을 유지합니다.

한 가지 더 : 당신의 코드에 표현을 변경하여 개선 될 수있다 "//*[@style]" 당신만을 요소를 가져 style 속성.


인기 답변

여기에 아주 간단한 해결책이있다.

VB.net

element.Attributes.Remove(element.Attributes("style"))

기음#

element.Attributes.Remove(element.Attributes["style"])


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