Html Agility Pack을 사용하여 HTML 페이지에서 모든 divs ID 가져 오기

c# html-agility-pack

문제

Html Agility Pack을 사용하여 HTML 페이지에서 모든 divs ID를 얻으려면 어떻게해야합니까? 모든 ID를 가져 와서 컬렉션에 넣으려고합니다.

<p>
    <div class='myclass1'>
        <div id='f'>
        </div>  
        <div id="myclass2">
            <div id="my"><div id="h"></div><div id="b"></div></div>
        </div>
    </div>
</p>

암호:

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); 
htmlDoc.OptionFixNestedTags=true;
htmlDoc.Load(filePath);    
HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("div"); 

모든 divs ID의 컬렉션을 얻으려면 어떻게해야합니까?

수락 된 답변

ID를 원한다면 div 요소 노드의 컬렉션을 가져 오는 대신 해당 id 속성 노드의 컬렉션을 가져올 수 있습니다. 예를 들면 :

List<string> ids = new List<string>();
foreach(XmlNode node in doc.SelectNodes("//div/@id"))
{
    ids.Add(node.InnerText);
}

귀하의 예제에서 <div class='myclass1'> 요소와 같이 ID가없는 div 요소는 건너 뜁니다.

"//div/@id" 는 XPath 문자열입니다. XPath는 XML 또는이 경우 민첩성 팩 라이브러리를 통한 HTML을 많이 다룰 경우 배우기 쉽다는 기술입니다. XPath는 XML 문서에서 일치하는 노드를 선택할 수있는 업계 표준입니다.

  • // 는 다음 노드를 현재 노드의 하위 또는 하위 노드로 선택하도록하려는 것입니다. 현재 노드는 문서의 루트 노드이기 때문에 문서의 어느 곳에서나 일치하는 노드를 찾습니다.
  • div 는 일치시키려는 요소 이름입니다. 따라서이 경우 문서의 모든 위치에서 div 요소를 찾도록 지시하고 있습니다.
  • / 는 자식 노드를 원한다는 것을 나타냅니다. 이 경우 id 속성은 div 요소의 자식이므로 먼저 div 요소를 원한다고 말한 다음 div 요소의 자식 노드 중 하나를 원한다고 말하면 슬래시가 필요합니다.
  • @id 는 모든 id 속성을 찾고 싶다는 것을 의미합니다. @ 기호는 요소 이름 대신 속성 이름임을 나타냅니다.

인기 답변

요 x 구문을 전달하여 div 컬렉션을 얻을 수 있습니다.

이처럼

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

    htmlDoc.OptionFixNestedTags=true;

    htmlDoc.Load(filePath);

 foreach(HtmlNode div doc.DocumentElement.SelectNodes("//div"))
 {
///.. code here
 }



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