HTMLAgilityPack을 사용하여 HTML 노드를 텍스트 노드로 대체하는 방법이 있습니까?

c# dom html html-agility-pack

문제

HTMLAgility 팩을 사용하여 문서 내의 노드를 텍스트 노드로 바꿉니다. 이것의 목적은 노드 자체를 둘러싼 태그를 제거하는 것입니다. 현재, 나는 다음과 같이한다.

//This code fixes redundant HTML formatting tags
//This is a snippet of code
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
    hChildNode.Name = "remove";
StringBuilder sb = new StringBuilder(hd.DocumentNode.WriteTo());
sb.Replace("<remove>", string.Empty);
sb.Replace("</remove>", string.Empty);

이 작업을 수행하는 더 좋은 방법이 있습니까? 새 텍스트 노드를 만들고 아래의 코드 스 니펫과 같은 작업을 수행하면 잘못된 캐스팅 오류가 발생합니다.

//This code fixes redundant HTML formatting tags
//This is a snippet of code
foreach (var hChildNode in hd.DocumentNode.SelectNodes("//b//b | //i//i | //u//u") ?? Enumerable.Empty<HtmlNode>())
    hChildNode.Name = "remove";
StringBuilder sb = new StringBuilder(hd.DocumentNode.WriteTo());
sb.Replace("<remove>", string.Empty);
sb.Replace("</remove>", string.Empty);

(오타가 지적 된 후에 업데이트되었지만 문제는 여전히 남아 있습니다)

이 방법을 잘못 사용하고 있습니까? 이와 같은 기능을 수행하기 위해 사용해야하는 또 다른 방법이 있습니까? 감사.

인기 답변

이 목적은 노드 자체를 둘러싼 태그를 제거하는 것입니다

두 번째 코드를 잘라내어 하나의 오타를 제외한 정확한 태그 제거를 수행합니다 (추측).

HtmlNode hNewNode = hd.CreateTextNode(hNewNode.InnerHtml);

hNewNode.InnerHtmlhChildNode.InnerHtml 대체해야합니다. 그렇지 않으면 코드가 컴파일되지 않습니다 (할당되지 않은 변수 사용).

또한 텍스트 노드를 만든 후에는 대체 된 자식 노드가 없습니다 (이 대신 노드를 바꾼 InnerHtml 속성과 동일한 값을 갖게됩니다).




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