Извлеките определенные значения из конфигурации XML

#xml #bash #xpath #xmlstarlet

#xml #удар #xpath #xmlstarlet

Вопрос:

Входной XML выглядит как несколько блоков:

 lt;Partiesgt;  lt;Party compid="CUST1" side="1"gt;  lt;Connectionsgt;  lt;SocketConnection listenport="9029" /gt;  lt;/Connectionsgt;  lt;/Partygt; lt;/Partiesgt;  

Моя цель состоит в том, чтобы донести до каждого клиента его конкретные параметры, такие как: составьте;прослушайте сообщение

К настоящему времени я могу заставить всех клиентов использовать

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

Следующим шагом будет цикл для каждого клиента, чтобы получить его протокол прослушивания, но

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

или любая другая попытка ничего не возвращает. Я что-то упускаю при использовании фильтрации [@value=string] ?

Заранее спасибо!

Ответ №1:

Своим примером и xmlstarlet :

 xmlstarlet select --text --template --match '//Parties/Party' --value-of   'concat(@compid,";",Connections/SocketConnection/@listenport)' -n config.xml  

Выход:

CUST1;9029

Видеть: xmlstarlet select --help