위의 답변에 문제가 있기 때문에이 질문에 대한 정식 답변을 작성하고 싶습니다.
우리의 문제
CSS의 선택 :
.foo
foo 클래스를 가진 모든 요소를 선택합니다 .
XPath에서이 작업을 어떻게 수행합니까?
XPath는 CSS보다 강력하지만 XPath 에는 CSS 클래스 선택기에 해당하는 기본 기능이 없습니다 . 그러나 해결책이 있습니다.
그것을하는 올바른 방법
XPath 에서 동등한 선택기는 다음과 같습니다 .
//*[contains(concat(" ", normalize-space(@class), " "), " foo ")]
normalize-space 함수는 선행 및 후행 공백을 제거하고 공백 문자 시퀀스를 단일 공백으로 바꿉니다.
(보다 일반적인 의미에서) 이것은 또한 CSS 선택자와 동일합니다.
*[class~="foo"]
클래스 속성 값이 공백으로 구분 된 값 목록 인 모든 요소와 일치 하며 그중 하나는 foo 와 정확히 동일합니다 .
몇 가지 분명하지만 잘못된 방법
XPath 선택기 :
//*[@class="foo"]
작동하지 않습니다! 예를 들어 둘 이상의 클래스가있는 요소와 일치하지 않기 때문입니다.
<div class="foo bar">
클래스 이름 주위에 추가 공백이 있으면 일치하지 않습니다.
<div class=" foo ">
'개선 된'XPath 선택기
//*[contains(@class, "foo")]
작동하지 않습니다! 예를 들어 foobar 클래스와 요소를 잘못 일치시키기 때문입니다.
<div class="foobar">
신용은 웹에서 찾은이 문제에 대한 가장 초기에 발표 된 솔루션 인이 친구에게 돌아갑니다.
http://dubinko.info/blog/2007/10/01/simple-parsing-of-space-seprated-attributes- in-xpathxslt /