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