es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Extraer valores específicos de la configuración XML

El XML de entrada parece varios bloques de:

<Parties>
<Party compid="CUST1" side="1">
<Connections>
<SocketConnection listenport="9029" />
</Connections>
</Party>
</Parties>

Mi objetivo es extraer para cada cliente sus parámetros específicos, como:
compid;listenport

Por ahora, puedo obtener todos los clientes usando
“`
xmlstarlet fo -D config.xml | xmlstarlet select -T -t -m '//Parties/Party' -v '@compid' -nl</p>

“`

El siguiente paso sería un bucle para cada cliente para obtener su listenport, pero

xmlstarlet fo -D config.xml | xmlstarlet select -T -t -m '//Parties/Party[@compid="CUST1"]' -v 'Connections/SocketConnection/@listenport'

o cualquier otro intento no devuelve nada.
¿Me falta algo en el filtrado usando [@value=string]?

¡Gracias de antemano!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que tu filtro utilizando [@value=string] es correcto, pero es posible que el valor que estás utilizando para compid no sea igual a ninguno de los valores en el archivo XML. Verifica que estás usando el valor correcto para compid.

    Además, en lugar de usar un ciclo para extraer el puerto de escucha de cada cliente, puedes modificar tu expresión XPath para extraer tanto compid como listenport a la vez utilizando el siguiente comando:

    xmlstarlet fo -D config.xml | xmlstarlet select -T -t -m '//Parties/Party' -v '@compid' -o ';' -v 'Connections/SocketConnection/@listenport' -nl
    

    Esto mostrará en pantalla el compid y listenport de cada cliente separados por un punto y coma.

Comments are closed.