O XPath pode corresponder a partes do nome de um elemento?
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 />
Solução
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"