HTML 민첩성 팩으로 DOM을 탐색하는 방법을 알아 내는데 어려움을 겪고 있습니다.
예를 들어 id="gbqfsa"
요소를 찾고 싶다고합시다.
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(Url);
var foo = from bar in doc.DocumentNode.DescendantNodes()
where bar.Attributes["id"].Value == "gbqfsa"
select bar.InnerText;
지금은 위 (위)를하고 있지만 foo
는 null
로 나오고 있습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
편집 : 이것은 if
문을 사용했다. InnerText
요소가 "Google 검색"과 InnerText
테스트하려고했습니다.
if (foo.Equals("Google Search"))
{
HasSucceeded = 1;
MessageBox.Show(yay);
}
else
{
MessageBox.Show("kms");
}
return HasSucceeded;
당신이해야 할 일은 :
var foo = (from bar in doc.DocumentNode.DescendantNodes()
where bar.GetAttributeValue("id", null) == "gbqfsa"
select bar.InnerText).FirstOrDefault();
당신은 잊었 FirstOrDefault()
의 조건에 만족하는 첫 번째 요소 선택 . where
그리고 Attributes["id"].Value
대체합니다 Attributes["id"].Value
GetAttributeValue("id", null)
Attributes["id"].Value
을 지정하면 요소에 id
특성이있는 경우 예외가 throw되지 않습니다.
foo
가 null
로 나오지 않는다고 생각합니다. 모든 하위 노드에 "id"속성이있는 것은 bar.Attributes["id"]
는 트리의 일부 요소에 대해서는 null입니다. GetAttributeValue
메서드를 사용하는 것이 좋습니다.이 메서드는 특성을 찾을 수없는 경우 기본값을 반환합니다.
var foo = from bar in doc.DocumentNode.DescendantNodes()
where bar.GetAttributeValue("id", null) == "gbqfsa"
select bar.InnerText;