Использование string()
даст вам только первое совпадение в XPath 1.0. Если вы удалите string()
, вы получите все три атрибута, но вам придется постобработать их, чтобы получить только значения. Я полагаю, это будет зависеть от того, как вы используете xmllint (что такое os / shell / et c).
Что-то вроде (протестировано с bash в cygwin) ...
attrs=$(xmllint --xpath "//Tag/@name" sample.xml)
echo $attrs | sed 's/\s*name="\([^"]*\)"/\1\n/g'
Другой вариант - сначала получить счетчик количества Tag
элементов, а затем вызвать xmllint столько раз с позиционным предикатом на Tag
.
Что-то вроде (проверено с bash в cygwin ) ...
count=$(xmllint --xpath "count(//Tag)" sample.xml)
if [[ $count != 0 ]]; then
for ((i=1; i<=$count; i++)); do
echo $(xmllint --xpath "string(//Tag[$i]/@name)" sample.xml)
done
fi