XMLStarlet Возвращает атрибут на основе значения (обратный поиск)

У меня есть этот xml:

<block name="http-www.example.com">
  <mapentry tag="AB12">bottlecap</mapentry>
  <mapentry tag="CD45">description goes here</mapentry>
  <mapentry tag="GH23">12345</mapentry>
  <mapentry tag="JK89">54321</mapentry>
</block>

И я хочу найти «тег» на основе значения.

Итак, я хочу найти «бутылку» и вернуть «AB12».

Во всех примерах, которые я видел, люди ищут атрибут, чтобы получить результат, но в этом типе xml это невозможно, поскольку узлы и атрибуты неоднозначны.

Я пытался использовать -i, но, похоже, это работает только с узлом или атрибутом, но не со значением.

xmlstarlet sel -t -i //bottlecap -v "//mapentry[@tag]" "mytest.xml"

Есть ли способ поиска значения?


person Dss    schedule 15.07.2014    source источник


Ответы (1)


Возможно, это то, что вам нужно?

xmlstarlet sel -t -v "//mapentry[. = 'bottlecap']/@tag" "mytest.xml"
person Eero Helenius    schedule 15.07.2014
comment
ДА! Благодарю вас! Я не знал об этом [. = 'хх']. Это отлично работает! - person Dss; 15.07.2014