Xml en ligne de commande : Différence entre versions
m |
m |
||
| Ligne 8 : | Ligne 8 : | ||
# récupérer le contenu de l'attribut value associé à thumbpoolsize dans le xml suivant: | # récupérer le contenu de l'attribut value associé à thumbpoolsize dans le xml suivant: | ||
| + | <syntaxhighlight lang="xml" line='line'> | ||
<pdfsam config-version="2"> | <pdfsam config-version="2"> | ||
<settings> | <settings> | ||
<laf current-laf="1" current-theme="13"/> | <laf current-laf="1" current-theme="13"/> | ||
<thumbpoolsize value="3"/> | <thumbpoolsize value="3"/> | ||
| − | + | </syntaxhighlight> | |
avec la commande: | avec la commande: | ||
$ xmllint --xpath 'string(/pdfsam/settings/thumbpoolsize/@value)' ./.pdfsam/pdfsam-config.xml | $ xmllint --xpath 'string(/pdfsam/settings/thumbpoolsize/@value)' ./.pdfsam/pdfsam-config.xml | ||
| Ligne 20 : | Ligne 21 : | ||
considérons le xml: | considérons le xml: | ||
| + | <syntaxhighlight lang="xml" line='line'> | ||
<?xml version='1.0' encoding='UTF-8'?> | <?xml version='1.0' encoding='UTF-8'?> | ||
<blocklist lastupdate="1518640450735" xmlns="http://www.mozilla.org/2006/addons-blocklist"> | <blocklist lastupdate="1518640450735" xmlns="http://www.mozilla.org/2006/addons-blocklist"> | ||
| Ligne 38 : | Ligne 40 : | ||
</emItems> | </emItems> | ||
</blocklist> | </blocklist> | ||
| + | </syntaxhighlight> | ||
si on veut récupérer la liste des attributs id associés à emItem, | si on veut récupérer la liste des attributs id associés à emItem, | ||
Version du 29 juillet 2018 à 11:21
xmllint, xmlstarlet
xmllint analyse un ou plusieurs fichiers XML (paramètres de la ligne de commande ou entrée standard). Il permet de valider le document ou d'en extraire des données (avec XPATH).
xmlstarlet est un autre outil en ligne de commande avec pas mal d'options.
Langage Xpath : voir https://en.wikipedia.org/wiki/XPath
- récupérer le contenu de l'attribut value associé à thumbpoolsize dans le xml suivant:
1 <pdfsam config-version="2">
2 <settings>
3 <laf current-laf="1" current-theme="13"/>
4 <thumbpoolsize value="3"/>
avec la commande: $ xmllint --xpath 'string(/pdfsam/settings/thumbpoolsize/@value)' ./.pdfsam/pdfsam-config.xml
- problème avec les namespaces
considérons le xml:
1 <?xml version='1.0' encoding='UTF-8'?>
2 <blocklist lastupdate="1518640450735" xmlns="http://www.mozilla.org/2006/addons-blocklist">
3 <emItems>
4 <emItem blockID="i334" id="{0F827075-B026-42F3-885D-98981EE7B1AE}">
5 <prefs/>
6 <versionRange minVersion="0" maxVersion="*" severity="3"/>
7 </emItem>
8 <emItem blockID="i1211" id="flvto@hotger.com">
9 <prefs>test2
10 </prefs>
11 <versionRange minVersion="0" maxVersion="*" severity="1">this tetxdttdt</versionRange>
12 </emItem>
13 <emItem blockID="i1228" id="unblocker30__web@unblocker.yt">
14 <prefs/>
15 <versionRange minVersion="0" maxVersion="*" severity="3"/>
16 </emItem>
17 </emItems>
18 </blocklist>
si on veut récupérer la liste des attributs id associés à emItem,
$ xmllint --xpath "//emItem/@id" /tmp/blocklist.xml XPath set is empty
l'erreur vient du namespace utilisé dans le document. Il n'y a pas moyen de le spécifiersur la ligne de commande, et il faudrait utiliser le xpath
--xpath "//*[namespace-uri()='http://www.mozilla.org/2006/addons-blocklist' and local-name()='emItem'/@id]"
et s'il ya plusieurs étages de paramètres, répéter namespace-uri()= ... and local-name()= pour chacun.
Alternative pour ignorer le namespace: passer par sed pour masquer l'attribut xmlns:
$ sed 's/xmlns/ignore/' /tmp/blocklist.xml | xmllint --xpath "//emItem/@id" -
id="{0F827075-B026-42F3-885D-98981EE7B1AE}" id="flvto@hotger.com" id="unblocker30__web@unblocker.yt"
- chercher dans un item particulier d'une liste a partir d'une valeur d'attribut
dans le xml ci-dessus, on veut le texte de versionRange pour le blockID="i1211"
$ sed 's/xmlns/ignore/' /tmp/blocklist.xml | xmllint --xpath '/blocklist/emItems/emItem[@blockID="i1211"]/versionRange/text()' - this tetxdttdt