2010-03-17 2 views
0

먼저 jpeg, jpg, bmp, png 또는 gif로 끝나는 모든 URL은 이미지이고 다른 URL은 그렇지 않다고 가정 할 수 있습니다. <a>을 모두 찾아서 href가 XPath 1.0을 사용하여 이미지를 가리키고 있음

나는 생각하고,이 개 솔루션을 시도 : 정규 표현식을 일치

  • 를 사용하여 $
  • 끝을-와 별도로
각을 확인 할 수 있습니다. (JPE g이 | BMP는 | | PNG GIF는?)

그러나 이들 중 어느 것도 XPath 1.0에 없거나 적어도 Firefox에 존재하지 않는 것으로 보입니다. (나는 greasemonkey 스크립트를 작성하므로 Firefox에서 작동하는 것이 중요합니다). 그렇게 생각 "XPath는 1.0 이미지에 대한 모든 링크 찾기"를하지 않은 제목 죄송

은 충분히 독특

답변

2

의 XPath 1.0에는 정규 표현식이없고, 어느 ends-with()있다.

URL은 유효하지 않게 된 공백을 포함 할 수 없으므로이를 사용하여 문자열의 끝을 일치시킵니다.

//a[ 
    contains(concat(@href, ' '), '.jpg ' or 
    contains(concat(@href, ' '), '.bmp ' or 
    contains(concat(@href, ' '), '.png ' 
] 

또는이 (@AakashM는 알 수 있듯이) :이 작업을 수행 할 수있는 전자는 짧고 보면 다소 더 기쁘게하는 동안

//a[ 
    substring(@href, string-length(@href) - 2, 3) = 'jpg' or 
    substring(@href, string-length(@href) - 2, 3) = 'bmp' or 
    substring(@href, string-length(@href) - 2, 3) = 'png' 
] 

내가, 후자의 옵션이 조금 더 나은 실적을 것 같아 에서. 여기서 성과가 절실히 필요한지에 달려 있습니다.

0
의 XPath는 끝-와() 함수를 가지고 있지 않기 때문에 어려울 것

하는 관련 파일 확장명에 대한 HREF 속성의 끝을 확인하는 데 사용해야합니다. 너는 substring-after()을 사용하는 것에 의지해야 할 것이다.

꽤 될 것 아니에요

, 뭔가 같은 ...

fn:substring-after(a[@href], '.') = 'jpg' 

편집 : substring-afternot a part of XPath 1.0 것 같습니다, 그래서 당신은 사용해야하는거야 도 이보다substringstring-length

+1

http://www.w3.org/TR/xpath/#section-String-Functions는 XPath 1.0 *이 해당 사양에서'substring-after'을 사용한다고 제안합니다. – Dancrumb

+0

XPath는 물론 1.0에도'substring -after()'함수를 사용하십시오. – Tomalak

+0

여러분, 고맙습니다. 나는 (받아 들여진)에 연결된 대답은 그렇지 않다는 것을 지적했다. 물론 나는 기록을 바로 잡기 위해 거기에 의견을 남겼습니다! 고맙습니다! –

2

substringstring-length의 조합을 사용할 수 있습니다. 둘 다 입니다. ath 1.0)을 사용하여 ends-with을 시뮬레이트합니다. 그것은 꽤 아니지만, 그것은 작동 :

substring(@href, string-length(@href) - 3 + 1, 3) = 'jpg' 

이 (여기 3jpg의 길이이다하며 1substring의 1 기반의 인덱스를 조정하는 것입니다) 같은 진리 값을 가져야한다

as

ends-with(@href, 'jpg') 

각 확장명을 개별적으로 확인하는 방법을 알고 계신 것으로 알고 있습니다.

3

XPath 솔루션을 요구하고 있지만 대체 방법은 CSS 선택기를 사용하여 요소를 선택하는 jQuery 또는 Prototype과 같은 것을 사용하는 것입니다.

jQuery로, 예를 들어, 당신은 사용할 수 있습니다

$("a[href$='jpg'],a[href$='gif'],a[href$='png']").each(functionOfChoice); 
+0

현대적인 브라우저에서는 jQuery가 필요하지 않습니다. 이는 XPath 기반 솔루션보다 훨씬 빠릅니다. document.querySelectorAll ("href $ = 'jpg'], [href $ = 'jpeg'], [href $ = 'gif'], [ href $ = 'png'], a [href $ = 'bmp'] ") ' – ecmanaut

+0

querySelectorAll 지원 : http://caniuse.com/queryselector – Dancrumb

관련 문제