Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/11/2017, à 14: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
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, à 16: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 29/11/2017, à 00: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
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, à 08: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. tongue

Dernière modification par Zakhar (Le 30/11/2017, à 20:02)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne