Il mio preferito è xmlstarlet perché sembra essere più potente di xmllint:
xmlstarlet sel -t -v '/resources/item[@id="index.php"]/description/text()' en.xml
il modo migliore per scegliere come target uno specifico e quindi eseguire il drill-down fino al relativo elemento figlio
L'espressione XPath corretta per eseguire questa operazione è:
/resources/item[@id="index.php"]/description/text()
In parole povere:inizia dal nodo del documento, fino all'elemento del documento resources
, sul suo figlio item
, ma solo se il valore di id
l'attributo è "index.php", al suo figlio description
e recuperarne il valore testuale.
Uso xmllint per convalidare i documenti XML, ma mai per le espressioni di percorso. In una bash shell (almeno con Mac OS) c'è uno strumento ancora più semplice per valutare le espressioni XPath, chiamato "xpath":
$ xpath en.xml '/resources/item[@id="index.php"]/description/text()'
Quindi, si ottiene il seguente risultato:
Found 1 nodes:
-- NODE --
DESCRIPTION
Se preferisci ancora xmllint, usalo nel modo seguente:
$ xmllint --xpath '/resources/item[@id="index.php"]/description/text()' en.xml > result.txt
Per impostazione predefinita, --xpath
implica --noout
, che impedisce a xmllint di restituire il file XML di input. Per rendere l'output più leggibile, reindirizzo l'output a un file.
$ cat result.txt
DESCRIPTION