Pages : 1
#1 Le 26/11/2017, à 13:58
- Arbiel
xpath et xmlstarlet
Bonjour à tous
Je veux retrouver dans un fichier xml le nœud pour lequel un argument contient une valeur, comme par exemple le noeud pour lequel l'argument arg2 contient la valeur "autre" comme dans
<noeud arg1='qqch' arg2='qqch autre en plus'>contenu_noeud</noeud>
Si j'ai bien compris XPath, il faut utiliser la fonctions contains("l'argument arg2","autre"), mais je ne sais pas écrire le chemin Xpath qui convient. Toutes mes tentatives se soldent par un message m'indiquant que la compilation de mon expression est impossible.
Quelqu'un peut-il me venir en aide ?
Merci d'avance.
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#2 Le 26/11/2017, à 15:27
- Zakhar
Re : xpath et xmlstarlet
Par exemple en XLST:
<xsl:copy-of select="noeud[@arg2='autre']"/>
Cela va sélectionner :
- les fils (par rapport à l'endroit où on se trouve) puisqu'on n'a pas précisé d'axe (fils par défaut)
- qui sont un élement "noeud"
- lequel contient un argument "arg2" qui a une valeur 'autre'
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
#3 Le 28/11/2017, à 23:51
- Arbiel
Re : xpath et xmlstarlet
Bonsoir
@Zakhar
Merci pour ta proposition, qui ne répond malheureusement pas à ma question qui était vraisemblablement mal posée puisque tu ne l'as pas comprise.
xmlstarlet permet de sélectionner des nœuds dans un fichier xml à partir d'une commande, la commande sel, avec une expression de type "//chemin d'accès au nœud" qui peut contenir un prédicat. Mon problème n'est donc pas de le sélectionner avec une commande xsl, mais avec
xmlstarlet sel -m -c "//nœud[prédicat]"
puisque c'est comme cela qu'elle s'utilise.
Cela est bel et bon, et je sais faire lorsqu'il s'agit d'un prédicat de la forme "élément=valeur", mais je veux que ce prédicat soit non plus une égalité totale, mais une égalité partielle, c'est-à-dire que l'élément contienne la valeur. xpath3 propose la fonction "contains ( arg1, arg2)" qui rend la valeur vrai si arg1 contient arg2. C'est cette fonction que je voudrais utiliser, mais je ne sais pas comment l'écrire.
Comprenne que si tu ne sais pas comment faire, il n'est vraiment pas utile de perdre ton temps, ni le mien, à m'indiquer une autre solution.
Merci encore.
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#4 Le 30/11/2017, à 07:55
- Zakhar
Re : xpath et xmlstarlet
Désolé, j'en suis laissé à XSLT2... pas encore regardé le 3 !..
Cela dit, vu que XMLStarlet utilise libxslt de Gnome, tu es limité à XPATH version 1.0
Et rassure-toi, je ne vais pas perdre mon temps à t'indiquer une autre solution... pour t'aider tu devrais déjà formuler clairement en français ce que tu cherches trouver et la moitié du problème sera résolu.
Dernière modification par Zakhar (Le 30/11/2017, à 19:02)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne
Pages : 1