Cómo contar nodos y obtener el valor de atributo sin usar xpath


2

Actualmente tengo un script de shell como este:

LOGIN=`curl 'https://www.ponta.jp/u/LWAS900/SLWAS900010.htm' -sS | grep '<input type="hidden" name\|<form\|</form'`

for i in $(seq $(printf "$LOGIN" | xmllint --xpath "count(/form/input)" -))
do
    printf " -d "
    printf "$LOGIN" | xmllint --xpath "string(/form/input[$i]/@name)" -
    printf "="
    printf "$LOGIN" | xmllint --xpath "string(/form/input[$i]/@value)" -
done

Quiero hacer lo mismo en un entorno unix que no tiene xpath. ¿Alguien puede decirme cómo hacerlo?


Seguramente no con expresiones regulares .
TNW

¿Instalar una biblioteca es una opción? Estaría sugiriendo perly XML::Twigcomo punto de partida, porque esa ... es otra forma de hacer búsquedas de estilo xpath en su entrada.
Sobrique

Respuestas:


0

Una solución basada en un analizador XML es el camino a seguir. Sin embargo, aquí va un truco rápido de expresión regular:

LOGIN=...
printf "$LOGIN" | 
    perl -nE 'say "-d $1=$2" if /name="(.*?)".*?value="(.*)"/'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.