tutorial texto que primeros pasos para necesito localizar localizadores identificadores elemento con comando buscar aprender xml parsing shell

texto - Obtenga xmllint para generar resultados de xpath separados por n, para el selector de atributos



que necesito para aprender selenium (4)

¿Cómo puedo hacer que xmllint genere múltiples resultados del selector xpath para los atributos "por línea"?

Tomemos este ejemplo:

<?xml version="1.0" encoding="ISO-8859-1"?> <config> <tagX key1="value1 " key2=" value2"/> <tagY key3="value3" key4=" value4 "/> </config> $ xmllint example.xml --xpath "/config/*/@*"

El resultado es:

key1="value1 " key2=" value2" key3="value3" key4=" value4 "

Lo que me gustaría obtener es:

key1="value1 " key2=" value2" key3="value3" key4=" value4 "

¿Tendré que dividirme después de las comillas pares, o hay alguna forma más ordenada de hacerlo?

Hay una pregunta relacionada, sobre el mismo tema, excepto que se trata de seleccionar contenidos de <tag>value</tag> , y no <tag attribute="value" />


La pregunta es antigua, pero cuando vine a este post buscando una solución al mismo problema, aquí está mi solución.

En linux agregue la sustitución sed a la salida dividida

$ xmllint example.xml --xpath "/config/*/@*" | sed "s| key|/nkey|g"

por supuesto, la expresión de sustitución depende de su estructura xml y su consulta xpath.

E incluso puede agregar números de línea en cada línea si agrega nl

$ xmllint example.xml --xpath "/config/*/@*" | sed "s| key|/nkey|g" | nl

Lo que da

1 key1="value1 " 2 key2=" value2" 3 key3="value3" 4 key4=" value4 "


Puedes probar:

$ xmllint --shell inputfile <<< `echo ''cat /config/*/@*''`

Sin embargo, es posible que deba grep la salida para filtrar las líneas no deseadas.


Si es una opción, intente usar xmlstarlet en su lugar:

xmlstarlet sel -t -v "/config/*/@*" example.xml


Si usa la última xmllint, los resultados deberían haberse separado por /n ahora. Sin embargo, si los campos contienen /n , puede usar esta versión patched para usar /0 como separador, con --xpath0 . Por la razón que sea, el PR aún no se ha fusionado.