HTML 민첩성 팩 RemoveChild - 예상대로 작동하지 않음

c# html-agility-pack

문제

이 html에서 span 태그를 제거하고 싶다고합시다.

<html><span>we do like <b>bold</b> stuff</span></html>

나는이 코드 덩어리가 내가 한 일을 할 것으로 기대하고있다.

<html><span>we do like <b>bold</b> stuff</span></html>

하지만 결과는 다음과 같습니다.

<html><span>we do like <b>bold</b> stuff</span></html>

범위 내에서 자식 노드를 뒤집을 수 있습니다. 내가 뭔가 잘못하고 있는거야?

수락 된 답변

HtmlAgilityPack의 버그처럼 보입니다 - 문제 레지스터 참조 :

http://htmlagilitypack.codeplex.com/workitem/9113

흥미롭게도 이것은 4 년 전에 제기되었습니다 ...

다음은 모든 범위 태그 (또는 지정한 다른 태그)를 제거하고 다른 노드를 올바른 순서로 유지하는 스 니펫입니다.

void Main()
{
    string html = "<html><span>we do like <b>bold</b> stuff</span></html>";
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(html);
    RemoveTags(doc, "span");
    Console.WriteLine(doc.DocumentNode.OuterHtml);
}

public static void RemoveTags(HtmlDocument html, string tagName)
{
    var tags = html.DocumentNode.SelectNodes("//" + tagName);
    if (tags!=null)
    {
        foreach (var tag in tags)
        {
            if (!tag.HasChildNodes)
            {
                tag.ParentNode.RemoveChild(tag);
                continue;
            }

            for (var i = tag.ChildNodes.Count - 1; i >= 0; i--)
            {
                var child = tag.ChildNodes[i];
                tag.ParentNode.InsertAfter(child, tag);
            }
            tag.ParentNode.RemoveChild(tag);
        }
    }
}

인기 답변

foreach (HtmlNode child in tag.ChildNodes)
{
    tag.ParentNode.InsertBefore(child, tag);
}

tag.Remove();



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