2011-01-19 2 views
0

다음과 같은 HTML이 HTML에서 특정 도메인의 앵커를 찾는 XPath

<div id="profile-bio-full"> 
    <p>Bla bla bla bla </p> 
    <p>Site: <a href="http://www.something.com" rel="nofollow">something.com</a></p> 
    <p>Facebook: <a href="http://www.facebook.com" rel="nofollow">facebook.com</a></p> 
    <p>Twitter: <a href="http://www.twitter.com" rel="nofollow">www.twitter.com</a></p> 
</div> 

그리고 Twitter URL (href "a"속성)을 가져와야합니다.

Nokogiri gem과 함께 Rails를 사용하고 있으며 Nokogiri xPath funciton을 사용하고 있습니다.

이 xPath를 사용하고 있습니다

//div[contains(@id, "profile-bio-full")]/a[contains(@href, "twitter.com")] 

하지만 작동하지 않습니다 :(. 추측?

+3

"작동하지 않음"은 (a) 발생시키고 자하는 작업과 (b) 실제로 발생한 작업을 지정하라는 즉각적인 빨간색 플래그 여야합니다. 다른 말로 표현하자면, 경험적 자료가 당신에게 효과가 없다고 믿게합니까? – LarsH

답변

3

당신의 a 정규 전에 귀하의 단일 슬래시는 a 요소가 즉시 할 필요하도록 지정 div의 아이 -하지만 그것은 p의 자식이다, 아니다

당신은이 작업을 수행 할 수 있습니다 :

.
//div[contains(@id, "profile-bio-full")]/p/a[contains(@href, "twitter.com")] 

또는 /a//a으로 변경하면 a이 바로 하위 항목이 아닌 하위 항목이어야 함을 의미 할 수 있습니다.

//div[contains(@id, "profile-bio-full")]//a[contains(@href, "twitter.com")] 
+0

정답입니다. – LarsH

+2

'id '를 정확히 알고 있다면, XPath로 머리를 더 간단하고 빠르게 만들 수 있습니다 :'// div [@ id = "profile-bio-full"] // a [contains (@href, "twitter.com")]' – Phrogz

+0

@Phrogz : +1 동의합니다 : 식별자는 정확히 일치해야합니다. –