xmlstarlet XPath выражение выбирает один результат, а не несколько
У меня есть XML-файл, имеющий такую структуру:
<?xml version="1.0" encoding="UTF-8"?>
<hudson>
<authorizationStrategy>
<roleMap type="globalRoles">
<role name="Employees">
<assignedSIDs>
<sid>abc</sid>
<sid>bcd</sid>
</assignedSIDs>
</role>
</roleMap>
<roleMap type="projectRoles">
<role name="test1" pattern=".*">
<assignedSIDs>
<sid>abc</sid>
<sid>zxc</sid>
</assignedSIDs>
</role>
<role name="test2" pattern=".*">
<permissions/>
<assignedSIDs>
<sid>abc</sid>
<sid>ghi</sid>
</assignedSIDs>
</role>
<role name="test3" pattern=".*">
<permissions/>
<assignedSIDs>
<sid>abc</sid>
</assignedSIDs>
</role>
</roleMap>
</authorizationStrategy>
</hudson>
Раньше я не давал всей рассматриваемой структуры и xpath, который я получил в решении, не давал ожидаемого результата (в моей системе, но он дал человеку, который ответил на мой вопрос) по следующей ссылкезначение атрибута поискового тега на основе значения дочернего узла с использованием XmlStarlet
Как уже упоминалось в этой ссылке, я хочу найти атрибут имени тега роли на основе значения тега sid. например: если я ищу abc, запрос должен вернуть Employees, test1, test2 и test3.
Вот скрипт, который я использовал:
xmlstarlet sel -t -v "//role[.//sid = 'abc']/@name" test.xml
но это дало мне только «сотрудников».
Я использую LINUX / Bash. Скажите, пожалуйста, что мне не хватает в выражении XPATH.