Como obtenho uma lista dos valores de atributos correspondentes usando xmllint e xpath?

3

Estou tentando usar o xmllint para analisar nomes de núcleos do Solr no arquivo de configuração. Isso funciona:

xmllint --xpath /solr/cores/core/@name solr.xml |grep -Po '(?<=name=")[a-z-]+(?=")'

E isso retorna algo como:

core-a
core-b
...

Qual é exatamente o que eu quero, mas eu gostaria de eliminar o grep. Parece que um deve ser capaz de fazer isso com apenas xpath. Sem grep, a saída se parece com:

name="core-a" name="core-b" ...

Encapsular as expressões em string() reduz a saída múltipla para apenas a primeira (ou seja, core-a e é isso), o que não é útil. Como posso aplicar a função string em cada resultado?

    
por Travis Wellman 15.11.2014 / 07:56

1 resposta

2

AFAIK, xmllint é bastante limitado. Mas você pode usar o xmlstarlet com seu comando sel para o que deseja fazer. Veja xmlstarlet sel --help para uso e um exemplo. Com o seu exemplo, seria:

xmlstarlet sel -T -t -m /solr/cores/core/@name -v . -n solr.xml
    
por 15.11.2014 / 10:08