Mit xmlstarlet Elemente ab bestimmter Nummer ausgeben und wenn Unterelement Namen enthält

FatManStanding

Lieutenant
Registriert
Aug. 2021
Beiträge
670
Hallo,

ich komme hier mit xmlstarlet nicht weiter. Ich kann mit

Code:
xmlstarlet sel -t -c "/actions/action[2]" file.xml

das gesamte zweite Element <action> anzeigen lassen. Ich finde keine Möglichkeit das ganze ab dem zweiten bis zum Ende zu realisieren. Sowas wie [2-] wird mit Fehler quittiert.

Kann ich mir alles unter <action> anzeigen lassen, wenn ein Unterelement einen bestimmten Inhalt hat? Wenn das z. B. aus aussieht (das stammt von Xfce-Dateimanager Thunar)

Code:
<actions>
<action>
    <icon>Terminal</icon>
    <name>Terminal hier öffnen</name>
</action>
<action>
    <icon>edit-find</icon>
    <name>In diesem Ordner suchen</name>
</action>

</actions>

will ich alles zwischen <action> und </action> sehen wenn unter <icon> "edit-find" steht.
 
Probiere mal dies:

Code:
xmlstarlet sel -t -c "/actions/action[icon='edit-find']" file.xml

Oder dies:

Code:
for i in $(seq 2 $(xmlstarlet sel -t -v "count(/actions/action)" file.xml)); do
  xmlstarlet sel -t -c "/actions/action[$i]" file.xml
done
 
FatManStanding schrieb:
das gesamte zweite Element <action> anzeigen lassen. Ich finde keine Möglichkeit das ganze ab dem zweiten bis zum Ende zu realisieren. Sowas wie [2-] wird mit Fehler quittiert.
Das geht mit xpath so:

Code:
/actions/action[position()>=2]
 
Zurück
Oben