programing

XPath contains()를 여기서 사용하는 방법?

topblog 2023. 9. 15. 20:41
반응형

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')]]

이 쿼리는 다음과 같은 요소를 제공합니다.classfeatureList하나 혹은 그 이상으로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그 안에

이것은 잘못된 것입니다. 왜냐하면

  1. contains(x,y)기대하는x끈이 되다, 그리고
  2. 여러 요소를 문자열로 변환하는 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 ulFoo, 그것은 포함하지 않습니다.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

반응형