Můj oblíbený je xmlstarlet, protože se zdá být výkonnější než xmllint:
xmlstarlet sel -t -v '/resources/item[@id="index.php"]/description/text()' en.xml
jak nejlépe zacílit na konkrétní a poté přejít k jeho podřízenému prvku
Správný výraz XPath k tomu je:
/resources/item[@id="index.php"]/description/text()
V jednoduché angličtině:Začněte od uzlu dokumentu k prvku dokumentu resources
, na jeho potomka item
, ale pouze pokud je hodnota id
atribut je "index.php", na jeho potomka description
a získat jeho textovou hodnotu.
K ověřování dokumentů XML používám xmllint, ale nikdy ne pro výrazy cesty. V bash shellu (alespoň s Mac OS) existuje ještě jednodušší nástroj pro vyhodnocování výrazů XPath, nazvaný "xpath":
$ xpath en.xml '/resources/item[@id="index.php"]/description/text()'
Potom se získá následující výsledek:
Found 1 nodes:
-- NODE --
DESCRIPTION
Pokud stále preferujete xmllint, použijte jej následujícím způsobem:
$ xmllint --xpath '/resources/item[@id="index.php"]/description/text()' en.xml > result.txt
Ve výchozím nastavení --xpath
implikuje --noout
, což zabraňuje xmllint ve výstupu vstupního souboru XML. Aby byl výstup čitelnější, přesměruji výstup do souboru.
$ cat result.txt
DESCRIPTION