Xpath와 HtmlAgilityPack을 사용하여 특정 단어 나 단어가 포함 된 innertext로 모든 요소를 ​​찾습니다.

html-agility-pack xpath

문제

나는 HtmlAgilityPack과 Xpath를 C # (.NET 4)과 함께 사용하여 간단한 검색 엔진을 만들려고 노력하고있다. 사용자 정의 검색 단어가 포함 된 모든 노드를 찾고 싶지만 XPath를 올바르게 가져올 수 없습니다. 예 :

<HTML>
 <BODY>
  <H1>Mr T for president</H1>
   <div>We believe the new president should be</div>
   <div>the awsome Mr T</div>
   <div>
    <H2>Mr T replies:</H2>
     <p>I pity the fool who doesn't vote</p>
     <p>for Mr T</p>
   </div>
  </BODY>
</HTML>

지정된 검색 단어가 "Mr T"이면 다음 노드를 원합니다. <H1> , 두 번째 <div> , <H2> 및 두 번째 <p> . doc.DocumentNode.SelectNodes("//text()[contains(., "+ searchword +")]"); 다양한 변형을 시도했습니다 doc.DocumentNode.SelectNodes("//text()[contains(., "+ searchword +")]"); 하지만 나는 항상 전체 DOM에있는 모든 단일 노드로 끝나는 것처럼 보입니다.

올바른 방향으로 나를 끌어들일 수있는 힌트는 매우 감사하겠습니다.

수락 된 답변

사용 :

//*[text()[contains(., 'Mr T')]]

이렇게하면 'Mr T' 문자열을 포함하는 텍스트 노드 자식이있는 XML 문서의 모든 요소가 선택됩니다.

다음과 같이 짧게 쓸 수도 있습니다 .

//*[text()[contains(., 'Mr T')]]

문자열 'Mr T' 가 포함 된 텍스트 노드의 부모를 선택합니다.


인기 답변

Xpath에 따르면 특정 키워드를 찾으려면 형식 ( "키워드"는 검색하려는 단어)을 따라야합니다.

// * [text () [contains (., 'keyword')]]

C #에서 위와 같은 형식을 따라야합니다. keyword 는 호출하는 문자열 변수입니다.

doc.DocumentNode.SelectNodes("//*[text()[contains(., '" + keyword + "')]]");



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