HTML 민첩성 팩 - ID 또는 클래스별로 태그 제거

c# html-agility-pack

문제

다음은 간단한 HTML입니다.

<html>
  <body>
    <div id="mainDiv">
       <div id="divToRemove"></div>
       <div id="divToKeep"></div>
       <div class="divToRemove"></div>
       <div class="divToRemove"></div>
    </div>
  </body>
</html>

"divToRemove"라는 ID 또는 클래스가있는 div를 제거한 다음 "mainDiv"라는 div 만 선택하려고합니다 (HtmlNode에서).

결과는 다음과 같아야합니다.

   <div id="mainDiv">
       <div id="divToKeep"></div>
   </div>

Html Agility Pack을 사용하여 어떻게 할 수 있습니까?

감사!

수락 된 답변

다음 코드는 여러분의 필요에 맞게이 Html Agility Pack 포럼 페이지 에서 수정 한 것입니다. 본질적으로, 우리는 모든 div를 잡고 루프를 통해 반복하고 클래스 나 이드의 일치 여부를 확인합니다. 그것이 있으면 제거하십시오.

var divs = htmldoc.DocumentNode.SelectNodes("//div");
if (divs != null)
{
    foreach (var tag in divs)
    {
        if (tag.Attributes["class"] != null && string.Compare(tag.Attributes["class"].Value, "divToRemove", StringComparison.InvariantCultureIgnoreCase) == 0)
        {
            tag.Remove();
        } else if(tag.Attributes["id"] != null && string.Compare(tag.Attributes["id"].Value, "divToRemove", StringComparison.InvariantCultureIgnoreCase) == 0) {
            tag.Remove();
        }
    }
}

이 if 문을 하나의 큰 if 문으로 결합 할 수도 있지만이 대답을 더 잘 읽는다고 생각했습니다.

마지막으로, 찾고 있던 노드를 선택하십시오 ...

var mainDiv = htmldoc.DocumentNode.SelectSingleNode("//div[@id='mainDiv']");

인기 답변

개인적으로, 나는 HtmlAgilityPack의 Linq 메소드를 사용하는 것을 선호한다. select는 길지만 상대적으로 간단합니다. 올바른 id 및 / 또는 클래스가있는 노드를 선택한 다음 Remove() 메서드를 호출하면됩니다.

foreach (var node in doc.DocumentNode.Descendants("div")
    .Where(n => n.Id.Equals("divToRemove", StringComparison.InvariantCultureIgnoreCase) 
        || n.GetAttributeValue("class", string.Empty).Equals("divToRemove", StringComparison.InvariantCultureIgnoreCase)))
    node.Remove();
HtmlNode mainNode = doc.DocumentNode.Descendants("div").Where(n => n.Id.Equals("mainDiv", StringComparison.InvariantCultureIgnoreCase).First();


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