XPath contains()를 여기서 사용하는 방법?
XPath를 배우려고 합니다.나는 다른 쪽을 보았습니다.contains()
이 근처의 예시들이지만, AND 연산자를 사용하는 것은 없습니다.작동이 안 돼요
//ul[@class='featureList' and contains(li, 'Model')]
설정:
...
<ul class="featureList">
<li><b>Type:</b> Clip Fan</li><li><b>Feature:</b> Air Moved: 65 ft.
Amps: 1.1
Clip: Grips any surface up to 1.63"
Plug: 3 prong grounded plug on heavy duty model
Usage: Garage, Workshop, Dorm, Work-out room, Deck, Office & more.</li><li><b>Speed Setting:</b> 2 speeds</li><li><b>Color:</b> Black</li><li><b>Power Consumption:</b> 62 W</li><li><b>Height:</b> 14.5"</li><li><b>Width:</b> Grill Diameter: 9.5"</li><li><b>Length:</b> 11.5"</li>
<li><b>Model #: </b>CR1-0081-06</li>
<li><b>Item #: </b>N82E16896817007</li>
<li><b>Return Policy: </b></li>
</ul>
...
당신은 첫번째만 보고 있습니다.li
어떤 것을 찾는 대신 당신이 가지고 있는 쿼리에 있는 아이.li
텍스트를 포함할 수 있는 하위 요소,'Model'
. 필요한 것은 다음과 같은 쿼리입니다.
//ul[@class='featureList' and ./li[contains(.,'Model')]]
이 쿼리는 다음과 같은 요소를 제공합니다.class
의featureList
하나 혹은 그 이상으로li
문자를 포함하고 있는 아이들,'Model'
.
제프 예이츠의 솔루션에 이미 +1을 부여했습니다.
사용자의 접근 방식이 작동하지 않는 이유에 대한 간단한 설명이 있습니다.다음 내용:
//ul[@class='featureList' 및 포함(li, '모델')]
의 한계에 부딪힙니다.contains()
함수(또는 XPath의 다른 문자열 함수).
첫 번째 인수는 문자열이어야 합니다.노드 목록을 제공하는 경우 "li
" 이 작업을 수행합니다. 문자열로 변환해야 합니다.그러나 이 변환은 목록의 첫 번째 노드에 대해서만 수행됩니다.
당신의 경우 리스트의 첫번째 노드는<li><b>Type:</b> Clip Fan</li>
( 문자열에 해당: "Type: Clip Fan
") 그 의미는 다음과 같습니다.
//ul[@class='featureList' 및 포함(li, 'Type')]
실제로 노드를 선택할 수 있습니다!
이것은 에 대한 일반적인 오해에 대한 오래된 질문에 대한 새로운 대답입니다.contains()
XPath에서...
요약:.contains()
평균에 부분 문자열이 포함되어 있고 노드가 포함되어 있지 않습니다.
상세설명
이 XPath는 종종 잘못 해석됩니다.
//ul[contains(li, 'Model')]
잘못된 해석:선택합니다.ul
를 포함하는 요소들li
와의 요소.Model
그 안에
이것은 잘못된 것입니다. 왜냐하면
contains(x,y)
기대하는x
끈이 되다, 그리고- 여러 요소를 문자열로 변환하는 XPath 규칙은 다음과 같습니다.
노드 집합은 문서 순서의 첫 번째 노드 집합에서 노드의 문자열 값을 반환하여 문자열로 변환됩니다.노드 집합이 비어 있으면 빈 문자열이 반환됩니다.
올바른 해석:선택합니다.ul
최초의 원소. li
자식에 다음을 포함하는 문자열 값이 있습니다.Model
부현
예
XML
<r>
<ul id="one">
<li>Model A</li>
<li>Foo</li>
</ul>
<ul id="two">
<li>Foo</li>
<li>Model A</li>
</ul>
</r>
XPaths
//ul[contains(li, 'Model')]
선택합니다.one
ul
요소.
참고: 더two
ul
첫 번째 값의 문자열 값이 선택되지 않았으므로 요소가 선택되지 않았습니다.li
자식 같은two
ul
가Foo
, 그것은 포함하지 않습니다.Model
부현
//ul[li[contains(.,'Model')]]
선택합니다.one
그리고.two
ul
요소들.
참고: 둘 다ul
요소가 선택되는 이유는contains()
는 각에에 됩니다.li
개별적으로. (따라서 까다로운 다중 요소 대 문자열 변환 규칙은 피합니다.)둘다요.ul
를 .li
열이을는식식는ee을 포함하는 자식Model
문자열 위의 --치 --열li
요소는 더이상 중요하지 않습니다.
참고 항목
붙여넣기 마이contains
예제:실행:
//table[contains(@class, "EC_result")]/tbody
언급URL : https://stackoverflow.com/questions/1064968/how-to-use-xpath-contains-here
'programing' 카테고리의 다른 글
strcase cmp 알고리즘에 결함이 있습니까? (0) | 2023.09.15 |
---|---|
MySQL 데이터베이스에 파일을 삽입하는 방법? (0) | 2023.09.15 |
모든 jQuery AJAX 요청에 사용자 지정 http 헤더 추가 (0) | 2023.09.15 |
get_env()가 내 부울 환경 변수를 문자열로 취급하는 이유는 무엇입니까? (0) | 2023.09.15 |
jQuery가 있는 HTML 게시물로 iframe 대상 지정 (0) | 2023.09.15 |