как разобрать xml как аргумент для сценария оболочки

Si sus datos no incluyen ninguna otra fecha -como formatos, puede usar seden toda la línea para cambiar las fechas:

sed 's#\([0-9][0-9]\)/\([0-9][0-9]\)/\([0-9][0-9][0-9][0-9]\)#\3/\1/\2#g'
1
27.02.2018, 18:29
2 ответа

Suponiendo que el XML esté bien formado, como

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-service>
  <service_info name="dummyapp" version="5.0"/>
  <object name="WebApplications">
    <item Location="dummyapp/ear/dummyapp.ear" name="dummy"/>
  </object>
  <object name="jdbc_oracle_nonxa">
    <item db_name="MYDB1" db_user="dummyapp_user" global_trans="None" initial_size="10" jndi_name="dummyapp-aty-ds" max_size="25" name="dummyapp-aty-ds" statement_cache_size="10"/>
  </object>
</weblogic-service>

(He cerrado etiquetas que no estaban cerradas en la pregunta)

... entonces lo siguiente generará25(para este ejemplo):

xml sel -t -v '//item/@max_size' -nl file.xml

Esto usa XMLStarlet para obtener el valor del atributo max_valuede todos los nodos item. El -nlal final inserta una nueva línea después de la salida.

Si necesita ser más específico y solo mire el nodo itemen el nodo objectcuyo nameesjdbc_oracle_nonxa:

xml sel -t -v '//object[@name="jdbc_oracle_nonxa"]/item/@max_size' -nl file.xml

Tenga en cuenta que XMLStarlet se instala como xmlstarleten lugar de xmlen algunos sistemas.


Usandoxmllint(sin nueva línea al final de la salida):

xmllint --xpath 'string(//object[@name="jdbc_oracle_nonxa"]/item/@max_size)' file.xml
5
28.04.2021, 23:50

A menudo, es mucho más rápido, pero menos seguro, con sed o grep:

sed -E -n 's/.*max_size="([0-9]+)".*/\1/p' sample-4.xml 
25

o grep:

grep -Eo 'max_size="[0-9]+" ' sample-4.xml | grep -Eo "[0-9]+"
25

No valida el xml y puede elegir el código comentado sin reconocerlo. Si observa la pantalla y obtiene dos resultados, es posible que lo note, pero si se usa en un proceso automatizado, es propenso a errores.

A veces ha escrito el programa, generando el xml, por lo que sabe si podría generar comentarios o max _size="..." en un contexto diferente no deseado. Si conoce los límites, no hay nada malo con sed, grep o awk, excepto que le impiden aprender la hermosa sintaxis xmlstarlet -.:)

0
28.04.2021, 23:50

Теги

Похожие вопросы