разбор xml с помощью xmlstarlet и определенного атрибута

Я пытался использовать xmlstarlet, но у меня возникли трудности. У меня есть следующий XML-канал.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RESPONSE VERSION="L100" REQUEST="show volume-statistics">
  <OBJECT basetype="volume-statistics" name="volume-statistics" oid="1" format="rows">
    <PROPERTY name="volume-name" display-name="Name">VOL0</PROPERTY>
    <PROPERTY name="volume-IOPS" display-name="IOPS">100</PROPERTY>
  </OBJECT>
</RESPONSE>

Мне нужно выбрать значение IOPS, где имя равно VOL0, и вывести только значение объема-IOPS.

Я пробовал следующие команды:

xmlstarlet sel -t -m "RESPONSE/OBJECT/PROPERTY/[@display-name='VOL0']" -v "RESPONSE/OBJECT/PROPERTY[@volume0IOPS] test.xml

Пример вывода

100

person jkuntz    schedule 04.03.2014    source источник
comment
Всегда сообщайте нам, какие сообщения об ошибках вы получили. Вы должны были понять, что круглые скобки не совпадают (оболочкой, которая не выполняет ваш код, но все еще ждет ввода). После исправления этого xmlstarlet напечатал бы уведомление о том, что ваше первое выражение XPath недействительно (знака / перед предикатом быть не должно).   -  person Jens Erat    schedule 04.03.2014


Ответы (1)


Это можно сделать с помощью одного выражения XPath, которое извлекает элемент <OBJECT/>, содержащий свойство имени «VOL0», а затем выбирает соответствующее свойство IOPS.

xmlstarlet sel -t -v '
  /RESPONSE/OBJECT[PROPERTY[@name="volume-name"]="VOL0"]
  /PROPERTY[@name="volume-IOPS"]' test.xml
person Jens Erat    schedule 04.03.2014
comment
Большое спасибо. Очень ценю помощь. - person jkuntz; 05.03.2014