HTML 민첩성 팩으로 DOM 트래버스

c# html-agility-pack

문제

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;

지금은 위 (위)를하고 있지만 foonull 로 나오고 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집 : 이것은 if 문을 사용했다. InnerText 요소가 "Google 검색"과 InnerText 테스트하려고했습니다.

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;

수락 된 답변

당신이해야 할 일은 :

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되지 않습니다.


인기 답변

foonull 로 나오지 않는다고 생각합니다. 모든 하위 노드에 "id"속성이있는 것은 bar.Attributes["id"] 는 트리의 일부 요소에 대해서는 null입니다. GetAttributeValue 메서드를 사용하는 것이 좋습니다.이 메서드는 특성을 찾을 수없는 경우 기본값을 반환합니다.

var foo = from bar in doc.DocumentNode.DescendantNodes()
            where bar.GetAttributeValue("id", null) == "gbqfsa"
            select bar.InnerText;



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