programing tip

"foo"를 포함하는 속성을 선택하기위한 올바른 XPath는 무엇입니까?

itbloger 2020. 6. 3. 21:32
반응형

"foo"를 포함하는 속성을 선택하기위한 올바른 XPath는 무엇입니까?


이 XML이 주어지면 XPath는 prop속성에 포함 된 모든 요소 Foo(처음 세 개의 노드)를 반환합니다 .

<bla>
 <a prop="Foo1"/>
 <a prop="Foo2"/>
 <a prop="3Foo"/>
 <a prop="Bar"/>
</bla>

//a[contains(@prop,'Foo')]

이 XML을 사용하여 결과를 다시 얻는 경우 작동합니다.

<bla>
 <a prop="Foo1">a</a>
 <a prop="Foo2">b</a>
 <a prop="3Foo">c</a>
 <a prop="Bar">a</a>
</bla>

편집 : 주목해야 할 또 다른 사항은 위의 XPath가 해당 특정 XML에 대한 정답을 반환하지만 "bla"요소의 "a"요소 만 얻으려면 다른 사용자도 언급했듯이

/bla/a[contains(@prop,'Foo')]

이것은 "blah"요소에 중첩되어 있는지에 관계없이 전체 xml 문서에서 모든 "a"요소를 검색합니다.

//a[contains(@prop,'Foo')]  

나는 철저하고 스택 오버 플로우 정신을 위해 이것을 추가했습니다. :)


이 XPath는 노드 이름이나 속성 이름에 관계없이 'Foo'를 포함하는 속성을 가진 모든 노드를 제공합니다.

//attribute::*[contains(., 'Foo')]/..

물론, 속성 자체의 내용에 더 관심이 있고 반드시 부모 노드 일 필요는 없다면 /.를 삭제하십시오.

//attribute::*[contains(., 'Foo')]

descendant-or-self::*[contains(@prop,'Foo')]

또는:

/bla/a[contains(@prop,'Foo')]

또는:

/bla/a[position() <= 3]

해부 :

descendant-or-self::

축-아래의 모든 노드와 노드 자체를 검색합니다. //보다 이것을 말하는 것이 더 낫습니다. // 어디에서나 (루트 노드의 자손 또는 자손) 의미하는 구현이 있습니다. 다른 하나는 기본 축을 사용합니다.

* or /bla/a

태그-와일드 카드 일치 및 / bla / a는 절대 경로입니다.

[contains(@prop,'Foo')] or [position() <= 3]

[] 내의 조건입니다. attribute는 다른 검색 축이므로 @prop는 attribute :: prop의 약자입니다. 또는 position () 함수를 사용하여 처음 3 개를 선택할 수 있습니다.


John C가 가장 비슷하지만 XPath는 대소 문자를 구분하므로 올바른 XPath는 다음과 같습니다.

/bla/a[contains(@prop, 'Foo')]

다음과 같은 것을 시도해 보셨습니까?

// a [포함 (@prop, "Foo")]

전에는 contains 함수를 사용한 적이 없지만 광고 된대로 작동해야한다고 생각합니다 ...


링크 자체의 내용과도 일치해야하는 경우 text ()를 사용하십시오.

//a[contains(@href,"/some_link")][text()="Click here"]


/ bla / a [({prop, "foo") 포함]


위 코드의 경우 // * [contains (@ prop, 'foo')]


이 시도:

// a [포함 (@ prop, 'foo')]

문서의 "a"태그에서 작동해야합니다.

참고 URL : https://stackoverflow.com/questions/103325/what-is-the-correct-xpath-for-choosing-attributes-that-contain-foo

반응형