Comment obtenir tous les attributs avec le même nom de balise avec xmllint xpath


un gars

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.

Daniel Haley

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

Articles connexes


Comment obtenir tous les attributs avec regex?

WebEngine J'ai fait cette regex pour obtenir tous les attributs de la balise "img". /<img\s+(?:([a-z_-]+)\s*=\s*"(.*?)"\s*)*\s*\/>/g Mais, cela ne prend qu'un seul attribut qui est le dernier. Comment puis-je obtenir tous les attributs avec regex? Chaîne de