Html Agility Pack을 사용하여 Html 문자열의 Style 속성에서 특정 스타일 제거

c# html-agility-pack html-parsing

문제

나는 HTML의 문자열을 가지고 있으며 다양한 HTML을 포함하지만 이것을 포함한다.

<span style="display:block;position:fixed;width:100%;height:2000px;background-color:rgba(0,0,0,0);z-index:9999!important;top:0;left:0;cursor:default;"></span>

이것은 이상하게 보일지 만, 모든 HTML 요소에 대해 style 속성 내의 특정 항목 만 제거하려고합니다. 예를 들어 제거하고 싶습니다.

position:fixedz-index:9999!important;top:0;left:0;

몇 가지 이름을 지 으려면 다른 이름을 사용하십시오. 이제 문제는 반드시 position:fixed; 가 아니라 position:fixed; 그것은 position:absolute; 일 수있다 position:absolute; 또는 무엇이든. z-index:9998; 일 수있는 것처럼 z-index:9998; 또는 top:20; 기타...

스타일 요소를 키로 제거 할 수 있어야합니다 position:*anything*top:*anything* etc .... 또한 대소 문자를 구분하지 않고이 작업을 수행합니다. 그래서 그것은 POSITION:*anything* 또는 PoSition:*anything*

Html Agility Pack을 사용하여이를 달성 할 수있는 방법이 있습니까?

인기 답변

HTML 민첩성 팩에서는 인라인 스타일 문자열 구문 분석을 지원하지 않지만 .NET에는 Web Forms 컨트롤을 지원하기위한 System.Web.UI 일부 기능이 있습니다.

그것은 CssStyleCollection 이라고 CssStyleCollection style 문자열을 문자열 키 / 값 쌍의 멋진 배열로 변환하고 원하지 않는 특정 키를 제거 할 수 있습니다.

그러나 WebControl 사용을위한 내부 도구이기 때문에 public 생성자가 없습니다. 대신 리플렉션을 통해 인스턴스를 생성하거나 이와 같은 해킹을 사용해야합니다.

CssStyleCollection style = new Panel().Style;

일단 생성되면,

style.Value = "YOUR STYLE STRING"; 

그런 다음 원하지 않는 항목을 제거하십시오.

style.Remove("position");
style.Remove("z-index");
style.Remove("top");
style.Remove("left");

style.Value 에서 새로운 구분 된 스타일 문자열을 검색하십시오.

중요 : 나는 이것을 테스트하지는 않았지만 약간 해킹이된다면 프로세스가 충분히 단순 해 보입니다. 내가 아직 만나지 않은 몇 가지 놀라움이있을 수 있습니다. 특히, 같은 문자열에 여러 개의 중복 스타일 설정이있는 상황을 처리하는 방법을 알지 못합니다.

top:0;margin-left:20;top:10; 

인라인 스타일 문자열에서 브라우저는 마지막으로 지정된 값을 존중하므로 top:10 개가 이깁니다. 그러나 이후 CssStyleCollection 고유 키를 사용하여, 그것은 모두 저장할 수 없습니다 top 값을 가장 가능성이 하나를 삭제합니다.



Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow