XPath를 사용하여 링크 텍스트로 링크 URL을 어떻게 찾을 수 있습니까?


88

잘 구성된 XHTML 페이지가 있습니다. 링크 된 텍스트가있을 때 링크의 도착 URL을 찾고 싶습니다.

<a href="http://stackoverflow.com">programming questions site</a>
<a href="http://cnn.com">news</a>

나는 원하는 된 XPath 가 주어진다면 그 표현 등 programming questions site이 줄 것이다 http://stackoverflow.com나는 그것을 주면 news그것은 줄 것이다 http://cnn.com.

답변:


142

다음과 유사해야합니다.

// a [text () = 'text_i_want_to_find'] / @ href

73
xpath를 배울 수 있습니까? 쿼리를 볼 때 매우 명확하고 이해하기 쉽습니다.하지만 직접 작성할 수는 없습니다
flybywire

4
@flybywire Stanford의 무료 데이터베이스 소개 과정을 읽으면 XML 및 XPath에 대한 좋은 섹션이 있습니다.
James P.

4
text () 대신 ". ="를 사용할 수 있습니다. 예를 들어 //a[.='Register here ']
danpop

1
텍스트를 모르면 어떻게하나요? 포함 된 노드 http또는 특정 키워드 를 선택할 수 있습니까 ?
Alston

78

당신에게는 너무 늦었지만 같은 질문을 가진 다른 사람에게는 ...

//a[contains(text(), 'programming')]/@href

물론 '프로그래밍'은 모든 텍스트 조각이 될 수 있습니다.


1
이것은 더 일반화되었습니다. 좋은 공유
Aaron Gillion

대소 문자를 구분합니다. 여기서 케이스를 무시할 수 있습니까?
user3060430

9
//a[text()='programming quesions site']/@href 

기본적으로 <a>원하는 텍스트가 있는 앵커 노드 를 식별 하고 href속성을 추출 합니다.


6

대괄호 안의 구를 SQL의 WHERE 절로 생각하십시오.

따라서이 쿼리는 "어디에나 표시되는"a "태그의"href "속성 (@)을 선택합니다 (//), 그러나"a "태그의 텍스트 내용이 ' 프로그래밍 질문 사이트 ' ".


안녕하세요 Peter, xpath 쿼리를 배울 수있는 튜토리얼 사이트가 있습니까?
Karim Narsindani

4

대소 문자를 구분하지 않는 포함의 경우 다음을 사용하십시오.

//a[contains(translate(text(),'PROGRAMMING','programming'), 'programming')]/@href

translate는 PROGRAMMING의 대문자를 소문자 프로그래밍으로 변환합니다.


답변으로 "감사"를 추가하지 마십시오. 사이트에 시간을 투자 하면 좋아하는 답변에 찬성 투표 할 수있는 충분한 권한 을 얻게됩니다 . 이것이 Stack Overflow에서 감사를 표하는 방식입니다.
Sklivvz 2013-06-30

5
"고마워"는 내 "답변"이 아니었다. 나는 어떤면에서 내가 개선 한 위의 답변에 공로를 돌렸다.
Abdo

1

html 민첩성 팩을 사용하는 경우 getattributeValue를 사용하십시오.

$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.