Comment obtenir tous les attributs avec le même nom de balise avec xmllint xpath
Exemple xml-
<xml>
<Tag name="attr1"></Tag>
<Tag name="attr2"></Tag>
<Tag name="attr2"></Tag>
</xml>
Comment puis-je obtenir les valeurs de tous les attributs avec xmllint, comme ceci-
attr1
attr2
attr3
Je ne peux utiliser que xmllint. J'ai essayé ceci
xmllint --xpath 'string(//Tag/@name)'
Mais cela ne renvoie que le premier match.
L'utilisation string()
ne vous donnera que la première correspondance dans XPath 1.0. Si vous supprimez, string()
vous obtiendrez les trois attributs, mais vous devrez les post-traiter pour obtenir uniquement les valeurs. Je suppose que cela dépendra de la façon dont vous exécutez xmllint (quel os / shell / etc).
Quelque chose comme (testé avec bash dans cygwin) ...
attrs=$(xmllint --xpath "//Tag/@name" sample.xml)
echo $attrs | sed 's/\s*name="\([^"]*\)"/\1\n/g'
Une autre option consiste à obtenir d'abord le nombre d' Tag
éléments, puis à appeler xmllint autant de fois avec un prédicat positionnel activé Tag
.
Quelque chose comme (testé avec bash dans 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