Por que todo mundo está olhando para o atributo "prop"? Perdi alguma coisa? Diz apenas obter os três primeiros nós.
6
Todo mundo está olhando para o atributo prop, porque foi isso que foi perguntado. Obtenha todos os nós em que prop contém "Foo". Adicionar <a prop="Foo5" /> e você vai ver por que ele não é apenas "os primeiros três nós" ..
erlando
A pergunta no corpo é mal formulada, independentemente do título. Você pode realmente estar em qualquer atributo de suporte ou deseja apenas os três primeiros nós?
3
Sim, consulte o título, por favor (e fique à vontade para editar).
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. :)
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 ().
Respostas:
Funciona se eu usar esse XML para obter resultados de volta.
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
Isso pesquisará todos os elementos "a" em todo o documento xml, independentemente de estar aninhado em um elemento "blah"
Eu adicionei isso por uma questão de rigor e no espírito do stackoverflow. :)
fonte
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:
Obviamente, se você estiver mais interessado no conteúdo do atributo, e não necessariamente no nó pai, basta soltar o botão / ..
fonte
//@*[contains(., 'Foo')]
Ou:
Ou:
Dissecado:
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.
A tag - uma correspondência curinga e / bla / a é um caminho absoluto.
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 ().
fonte
John C é o mais próximo, mas o XPath faz distinção entre maiúsculas e minúsculas; portanto, o XPath correto seria:
fonte
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 ...
fonte
Se você também precisar corresponder ao conteúdo do link, use text ():
//a[contains(@href,"/some_link")][text()="Click here"]
fonte
/ bla / a [contém (@prop, "foo")]
fonte
Para o código acima ... // * [contains (@ prop, 'foo')]
fonte
tente isto:
// a [contém (@ prop, 'foo')]
que deve funcionar para qualquer tag "a" no documento
fonte