Dado esse XML, o XPath retorna todos os elementos cujo prop
atributo contém Foo
(os três primeiros nós):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
Dado esse XML, o XPath retorna todos os elementos cujo prop
atributo contém Foo
(os três primeiros nós):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
Respostas:
//a[contains(@prop,'Foo')]
Funciona se eu usar esse XML para obter resultados de volta.
<bla>
<a prop="Foo1">a</a>
<a prop="Foo2">b</a>
<a prop="3Foo">c</a>
<a prop="Bar">a</a>
</bla>
Edit: Outra coisa a observar é que, enquanto o XPath acima retornará a resposta correta para esse xml específico, se você quiser garantir que você obtenha apenas os elementos "a" no elemento "bla", você deve, como outros usuários mencionaram, usar
/bla/a[contains(@prop,'Foo')]
Isso pesquisará todos os elementos "a" em todo o documento xml, independentemente de estar aninhado em um elemento "blah"
//a[contains(@prop,'Foo')]
Eu adicionei isso por uma questão de rigor e no espírito do stackoverflow. :)
xmlme.com
agora redireciona para outro host e não parece hospedar a ferramenta ou algo parecido.
Este XPath fornecerá todos os nós que possuem atributos contendo 'Foo', independentemente do nome do nó ou do nome do atributo:
//attribute::*[contains(., 'Foo')]/..
Obviamente, se você estiver mais interessado no conteúdo do atributo, e não necessariamente no nó pai, basta soltar o botão / ..
//attribute::*[contains(., 'Foo')]
//@*[contains(., 'Foo')]
descendant-or-self::*[contains(@prop,'Foo')]
Ou:
/bla/a[contains(@prop,'Foo')]
Ou:
/bla/a[position() <= 3]
Dissecado:
descendant-or-self::
The Axis - pesquise todos os nós abaixo e o próprio nó. Geralmente é melhor dizer isso do que //. Eu encontrei algumas implementações em que // significa qualquer lugar (descendente ou eu do nó raiz). O outro usa o eixo padrão.
* or /bla/a
A tag - uma correspondência curinga e / bla / a é um caminho absoluto.
[contains(@prop,'Foo')] or [position() <= 3]
A condição dentro de []. @prop é uma abreviação de attribute :: prop, pois attribute é outro eixo de pesquisa. Como alternativa, você pode selecionar os 3 primeiros usando a função position ().
John C é o mais próximo, mas o XPath faz distinção entre maiúsculas e minúsculas; portanto, o XPath correto seria:
/bla/a[contains(@prop, 'Foo')]
Você já tentou algo como:
// a [contém (@prop, "Foo")]
Eu nunca usei a função contains antes, mas suspeito que ela funcione conforme anunciado ...
Se você também precisar corresponder ao conteúdo do link, use text ():
//a[contains(@href,"/some_link")][text()="Click here"]
/ bla / a [contém (@prop, "foo")]
tente isto:
// a [contém (@ prop, 'foo')]
que deve funcionar para qualquer tag "a" no documento