Pergunta

Eu quero fazer isso:

//*fu

que retorna todos os nós cujo nome termina em fu, como <tarfu /> e <snafu />, mas não <fubar />

Foi útil?

Solução

Faça algo como:

//*[ends-with(name(), 'fu')]

Para uma boa referência XPath, confira Escolas W3.

Outras dicas

Esta resposta é para XPath 1.0 onde não há equivalente do Função padrão XPath 2.0 termina com().

A seguinte expressão XPath 1.0 seleciona todos os elementos no documento xml, cujos nomes terminam com a string "fu":

//*[substring(name(),string-length(name())-1) = 'fu']

Lutei com a resposta de Dimitre Novatchev, ela não retornava correspondências.Eu sabia que seu XPath deveria ter uma seção informando que "fu" tem comprimento 2.

É aconselhável ter um string-length('fu') para determinar o que substring.

Para quem não consegue obter resultados com sua resposta e precisa de solução com XPath 1.0:

//*[substring(name(), string-length(name()) - string-length('fu') +1) = 'fu']

Encontra correspondências de elementos que terminam com "fu"

ou

//*[substring(name(), string-length(name()) - string-length('Position') +1) = 'Position']

Encontra correspondências com elementos que terminam com "Posição"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top