C #에서 HtmlAgilityPack을 사용하여 자식을 포함한 요소의 모든 텍스트 노드 검색

.net .net-2.0 c# html-agility-pack xpath

문제

자녀를 포함하여 요소의 모든 텍스트 노드를 가져 오려고하지만 어떤 이유로 그것이 전체 문서 HTML을 제공합니다.

이것이 내가 생각해 낸 것입니다.

HtmlAgilityPack.HtmlNode el = htmlDoc.DocumentNode.SelectSingleNode("(//div[@class='TableContainer'])[" + index + "]");
if (el != null)
{
    foreach (HtmlNode node in el.SelectNodes("//text()"))
    {
        Debug.WriteLine("text=" + node.InnerText.Replace(" ", " "));
    }
}

전체 text=line 을 인쇄 text=line . 나는 여기에 //text() 찾은 스 니펫 인 //text() 문제가 있다고 확신하지만, 나는 그것을하는 다른 방법을 모른다. 그리고 나는 그것에 미쳐 가고있다.

수락 된 답변

상대적 XPath 표현식을 사용해야합니다. 즉, el 컨텍스트 노드에 상대적이어야합니다.

HtmlAgilityPack.HtmlNode el = htmlDoc.DocumentNode.SelectSingleNode("(//div[@class='TableContainer'])[" + index + "]");
if (el != null)
{
    foreach (HtmlNode node in el.SelectNodes(".//text()"))
    {
        Debug.WriteLine("text=" + node.InnerText.Replace(" ", " "));
    }
}

"//text()" 는 문서 루트 노드의 모든 자손 텍스트 노드를 선택합니다.

자세한 내용은 XPath 사양에서 위치 경로약식 구문 을 참조하십시오.

  • //para 는 문서 루트의 모든 para 자손을 선택하여 문맥 노드와 같은 문서의 모든 para 요소를 선택합니다

  • .//para 는 컨텍스트 노드의 하위 요소 자손을 선택합니다.




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