2014-03-27 4 views
1

아래 작업에는 html 민첩성이 사용됩니다.웹 페이지에서 문자열을 검색하는 xpath 쿼리

xpath 쿼리 일 수 있습니다 궁금해서 문자열 검색 용어를 포함하는 모든 노드를 가져옵니다. 요소의 속성과 내용을 모두 검색해야합니다.

<HTML> 
<BODY > 
    <H1>Mr T for president</H1> 
    <div class="test">We believe the new president should be</div> 
    <div id="test">the awsome Mr T</div> 
    <div> 
    <H2>Mr T replies:</H2> 
    <p>test paragraph</p> 
    <p class="test">for Mr T</p> 
    </div> 
    </BODY> 
</HTML> 

모든 html 요소가 속성 또는 innertext에서 테스트를 갖기를 원한다고 말하고 싶습니다.

+0

음 ... HTML이 XML이 아니다. XPath는 XML을위한 도구입니다. – spender

+0

태그 데이터 또는 속성을 검색 문자열로 test를 포함하는 다른 것으로 수정하려고합니다. – sunder

+0

그래서 Html 파서를 사용하십시오. HtmlAgilityPack은 훌륭합니다. 너겟으로 잡아라. – spender

답변

1

속성 값 또는 텍스트 노드의 지정된 토큰을 포함하는 모든 요소 노드를 찾으려면, 당신은이를 사용할 수 있습니다

//*[text()[contains(., 'token')] or @*[contains(., 'token')]] 

텍스트가 다른 마크 업에 의해 중단 될 때이 실패 할주의 예 : <p>foo<em>bar</em></p>.

+0

작은 변화 후에도 효과가있는 것처럼 보입니다.] 나는 또 다른 질문이있다 - 나는이 검색어를 내 검색어로 사용한다! @ # $ %^& (.txt하지만이 결과는 null이되는 이유는 무엇입니까? – sunder

+0

오타를 지적 해 주셔서 고맙습니다. 검색 토큰의 직접적인 문제는 아니지만 앰퍼샌드가 문제가 될 수 있습니다 .HTML 입력에서 올바르게 이스케이프 처리됩니까? –

+0

예, 그렇지만이 검색 토큰에 대해 null 결과가 발생합니다. '! @ # $ %^& (.txt ',이 검색 토큰은 파일 이름입니다.) – sunder

0

당신은 요소의 내부 텍스트 또는 속성 값에 대한 키워드 '테스트'에 맞게이 XPath를 시도 할 수 있습니다 :

//*[contains(text(), 'test') or @*[contains(., 'test')]] 
+1

여러 항목 텍스트 노드는'contains ($ string, $ needle)'는 단일 문자열만을 입력으로 허용합니다. –

관련 문제