Mein Favorit ist xmlstarlet, weil es leistungsfähiger zu sein scheint als xmllint:
xmlstarlet sel -t -v '/resources/item[@id="index.php"]/description/text()' en.xml
wie man am besten auf ein bestimmtes Element abzielt und dann einen Drilldown zu seinem untergeordneten Element durchführt
Der richtige XPath-Ausdruck dafür ist:
/resources/item[@id="index.php"]/description/text()
Im Klartext:Beginnen Sie beim Dokumentknoten, bis zum Dokumentelement resources
, auf sein Kind item
, aber nur wenn der Wert von id
Attribut ist "index.php", auf seinem Kind description
und seinen Textwert abrufen.
Ich verwende xmllint, um XML-Dokumente zu validieren, aber niemals für Pfadausdrücke. In einer Bash-Shell (zumindest unter Mac OS) gibt es ein noch einfacheres Tool zum Auswerten von XPath-Ausdrücken namens "xpath":
$ xpath en.xml '/resources/item[@id="index.php"]/description/text()'
Dann wird das folgende Ergebnis erhalten:
Found 1 nodes:
-- NODE --
DESCRIPTION
Wenn Sie immer noch xmllint bevorzugen, verwenden Sie es wie folgt:
$ xmllint --xpath '/resources/item[@id="index.php"]/description/text()' en.xml > result.txt
Standardmäßig --xpath
impliziert --noout
, wodurch verhindert wird, dass xmllint die XML-Eingabedatei ausgibt. Um die Ausgabe besser lesbar zu machen, leite ich die Ausgabe in eine Datei um.
$ cat result.txt
DESCRIPTION