htmlagilitypack을 사용하여 div 태그 안의 텍스트를 추출하는 방법

c# html html-agility-pack winforms

문제

div 클래스 사이에 "Some text goes here"텍스트를 추출하고 싶습니다. 나는 html 민첩성 팩을 사용하고 있으며, C #

<div class="productDescriptionWrapper">
Some Text Goes here...
<div class="emptyClear"> </div>
</div>

이것이 내가 가진 것입니다 :

Description = doc.DocumentNode.SelectNodes("//div[@class=\"productDescriptionWrapper\").Descendants("div").Select(x => x.InnerText).ToList();

이 오류가 발생합니다.

An unhandled exception of type 'System.NullReferenceException' 

나는 텍스트가 b / wa <h1> 인지 <p> 아니면 "div"대신에 "h1"또는 "p"라고 써야 하는지를 알고 있습니다.

누군가 제발 도와주세요.

수락 된 답변

다음과 같이 작은 따옴표를 사용하십시오.

//div[@class='productDescriptionWrapper']

모든 유형의 모든 자손을 사용하려면 다음을 사용하십시오.

//div[@class='productDescriptionWrapper']//* ,

p 와 같은 특정 유형의 모든 자손을 가져 오려면 //div[@class='productDescriptionWrapper']//p .

div 또는 p 모든 자손을 얻으려면 :

//div[@class='productDescriptionWrapper']//*[self::div or self::p] 

비어 있지 않은 모든 자손 텍스트 노드를 가져 와서 다음과 같이 사용하고 싶다고합시다 :

//div[@class='productDescriptionWrapper']//text()[normalize-space()]

인기 답변

귀하가 게시 한 HTML 스 니펫에서 doc 이 생성 doc null 참조 예외를 얻을 수있는 방법은 없습니다. 어쨌든, 바깥 쪽 <div> 안에있는 텍스트를 가져오고 안쪽에있는 텍스트가 아닌 경우 xpath /text() 를 사용 하면 직접 자식 텍스트 노드를 얻을 수 있습니다.

예를 들어 다음 HTML 스 니펫이 제공됩니다.

var html = @"<div class=""productDescriptionWrapper"">
Some Text Goes here...
<div class=""emptyClear"">Don't get this one</div>
</div>";
var doc = new HtmlDocument();
doc.LoadHtml(html);

..이 표현식은 바깥 쪽 <div> 에서만 텍스트를 반환합니다.

var Description = doc.DocumentNode
                     .SelectNodes("//div[@class='productDescriptionWrapper']/text()")
                     .Select(x => x.InnerText.Trim())
                     .First();
//Description : 
//"Some Text Goes here..."

.. 대조적으로, 다음은 모든 텍스트를 반환합니다.

var Description = doc.DocumentNode
                     .SelectNodes("//div[@class='productDescriptionWrapper']")
                     .Select(x => x.InnerText.Trim())
                     .First();
//Description :
//"Some Text Goes here...
//Don't get this one"


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