xmlstarlet XPath-Ausdruck wählt ein einzelnes Ergebnis anstelle mehrerer

Ich habe eine XML-Datei mit folgender Struktur:

<?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>

Vorhergehend habe ich nicht die gesamte fragliche Struktur und den xpath angegeben, den ich in der Lösung erhalten habe, und habe nicht das Ergebnis angegeben, das ich erwartet hatte (auf meinem System, aber es wurde der Person angezeigt, die meine Frage beantwortet hat), und zwar unter folgendem Linksearch-Tag-Attributwert basierend auf dem Wert des untergeordneten Knotens mit XmlStarlet

AS in diesem Link erwähnt, möchte ich Rollen-Tag-Name-Attribut basierend auf dem Wert des Sid-Tags finden. Zum Beispiel: Wenn ich nach abc suche, muss die Abfrage Employees, test1, test2 und test3 zurückgeben.

Hier ist das Skript, das ich verwendet habe:

xmlstarlet sel -t -v "//role[.//sid = 'abc']/@name" test.xml

aber es gab mir nur "Mitarbeiter".

Ich benutze LINUX / bash. Bitte sagen Sie mir, was mir im XPATH-Ausdruck fehlt.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage