programing

xpath에서 not contains ()를 사용하는 방법은 무엇입니까?

nasanasas 2020. 11. 30. 17:53
반응형

xpath에서 not contains ()를 사용하는 방법은 무엇입니까?


다음과 같이 구성된 XML이 있습니다.

<whatson>
  <productions>    
    <production>
      <category>Film</category>
    </production>
    <production>
      <category>Business</category>
    </production>
    <production>
      <category>Business training</category>
    </production>
  </productions>
</whatson>

그리고 "비즈니스"가 포함되지 않은 카테고리의 모든 프로덕션을 선택해야합니다 (이 예에서는 첫 번째 프로덕션 만 해당).

xpath로 가능합니까? 이 라인을 따라 작업을 시도했지만 아무데도 없었습니다.

//production[not(contains(category,'business'))]

XPath 쿼리는 대소 문자를 구분합니다. 귀하의 예를 살펴보면 (그런데, 아무도 더 이상 예를 제공하지 않는 것 같습니다!) "비즈니스"를 "비즈니스"로 변경하여 원하는 결과를 얻을 수 있습니다.

//production[not(contains(category,'Business'))]

Chrome에서 XML 파일을 열고 개발자 도구를 사용하여 해당 XPath 쿼리를 실행하여이를 테스트했으며 Film 범주 만 다시 제공했습니다.


"비즈니스"가 포함되지 않은 카테고리의 모든 작품을 선택해야합니다.

@Arran의 대답을 올바른 것으로 upvoted했지만 이것을 추가합니다 ... 엄격하게 해석하면 OP의 사양은 다음과 같이 구현됩니다.

//production[category[not(contains(., 'Business'))]]

보다는

//production[not(contains(category, 'Business'))]

후자는 첫 번째 category 하위에 "비즈니스"가 포함되지 않은 모든 프로덕션을 선택합니다 . 두 개의 XPath 표현식은 a productioncategory자식이 없거나 둘 이상인 경우 다르게 작동합니다 .

짧은 예제 XML에서 <production>같이 모든 사람 이 정확히 하나의 <category>자식을 갖는 한 실제로는 아무런 차이가 없습니다 . 그것이 사실인지 항상 믿을 수 있는지 여부는 제약 조건을 적용하는 스키마가 있는지 여부와 같은 다양한 요인에 따라 다릅니다. 개인적으로 "비용이 많이 들지 않기"때문에 더 강력한 옵션을 선택하겠습니다. 질문에 명시된대로 귀하의 요구 사항이 실제로 정확하다고 가정합니다 (예 : '카테고리가없는 모든 프로덕션 선택 '비즈니스'포함 ').


not(expression)기능 을 사용할 수 있습니다

not() xpath의 함수입니다 (연산자가 아닌)

예:

//a[not(contains(@id, 'xx'))]

또는

expression != true()

// production [not (contains (category, 'business'))]이어야합니다.

참고 URL : https://stackoverflow.com/questions/11024080/how-to-use-not-contains-in-xpath

반응형