programing

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

powerit 2023. 9. 10. 13:09
반응형

"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]

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

다음과 같은 것을 시도해 본 적이 있습니까?

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

나는 contains 기능을 사용해 본 적이 없지만 그것이 광고대로 작동할 것이라고 의심합니다.

John C가 가장 가깝지만 XPath는 대소문자를 구분하므로 정확한 XPath는 다음과 같습니다.

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

링크 자체의 내용도 일치시켜야 하는 경우 text()를 사용합니다.

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

/bla/a[foo(@prop, "foo")]

시도해 보십시오.

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

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

위의 코드는...//*[foo(@prop, 'foo')]

다음과 같이 사용할 수도 있습니다.

a[@class='specific-class-name' and contains(@href,'/link/to/something')]

이것은 특정 단어를 포함하는 속성 href를 가진 태그 a가 속성 이름 앞에 @를 사용하는 것을 잊지 않는 것을 의미합니다.

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

반응형