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
}