자식의 내부 텍스트를 무시하는 노드의 내부 텍스트

c# html-agility-pack xpath

문제

너무 간단하게 여기에서 물어볼 수 있다면 나에게 용서해라. 그러나 이것은 html-agility-pack으로 첫 날이기 때문에 노드의 직접적인 자식 인 노드의 내부 텍스트를 선택하는 방법을 분류 할 수 없다. 자식 노드의 내부 텍스트를 무시합니다.

예를 들어

<div id="div1">
   <div class="h1"> this needs to be selected
   <small> and not this</small>
   </div>
</div>

현재 나는 이것을 시도하고있다.

HtmlDocument page = new HtmlWeb().Load(url);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']");
string selText = s.innerText;

전체 텍스트를 반환합니다 (예 : this가 선택되어야하며 this가 아닙니다). 어떤 제안 ??

수락 된 답변

/text() 옵션을 사용하여 특정 태그 아래의 모든 텍스트 노드를 직접 가져올 수 있습니다. 첫 번째 버전 만 필요하면 [1] 을 추가하십시오.

page.LoadHtml(text);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']/text()[1]");
string selText = s.InnerText; 

인기 답변

자식의 앞뒤에 텍스트가 있으면 div 여러 텍스트 노드가있을 수 있습니다. 마찬가지로 여기 에서 지적했듯이 노드의 모든 직접 텍스트 내용을 얻는 가장 좋은 방법은 다음과 같이하는 것입니다.

HtmlDocument page = new HtmlWeb().Load(url);
var nodes = page.DocumentNode.SelectNodes("//div[@id='div1']//div[@class='h1']/text()");

StringBuilder sb  = new StringBuilder();
foreach(var node in nodes)
{
   sb.Append(node.InnerText);
}

string content = sb.ToString();



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