I want to get the value of name and put it in a variable using XMLLint
echo \'cat //body
An approach with a helper awk command that supports multiple attributes (a streamlined version of ego's approach):
echo 'cat //*/@name' | xmllint --shell file | awk -F\" 'NR % 2 == 0 { print $2 }'
The awk command:
splits xmllint's output lines into fields by " chars. (-F\")
xmllint normalizes quoting around attribute values to "..." on output, even if the input had '...', so it's sufficient to split by ".only processes even-numbered lines (NR %2 == 0), thereby filtering out the separator lines that cat invariably prints.
print $2 then prints only the 2nd field, which is the value of each attribute without the enclosing "...".
Assuming the following sample XML in file:
the above yields:
abc
def