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 06/06/2019, à 18:10

Arbiel

xmlstarlet : comparer des chaînes de caractères

Bonjour

Je cherche à sélectionner un élément xml sur la base d'une chaîne de caractères dont la valeur doit se situer entre celles de deux de ses attributs.

cat ${fichier_xml} | xmlstarlet -t -c "//élement[@attribut1<=${recherche} and @attribut2>=${recherche]"

ne me donne aucun résultat, même lorsque je réduis la sélection à une seule comparaison, alors qu'un seul test sur égalité fonctionne parfaitement.

Merci d'avance à quiconque pourra m'indiquer comment faire.

Arbiel


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 06/06/2019, à 18:28

Watael

Re : xmlstarlet : comparer des chaînes de caractères

grrr : UUOC!

en plus, on n'a même pas le fichier pour faire des tests.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 06/06/2019, à 20:08

Arbiel

Re : xmlstarlet : comparer des chaînes de caractères

Bonsoir

Je te remercie de t'intéresser à mon problème

Voici le fichier

<section id='dictionnaire Bailly intégral'>
<article class='page_dic' data-page='0001' data-pr='α' data-dr='αϐαξ'><a href='http://www.tabularium.be/bailly/0001'>α - ἄϐαξ</a></article>
<article class='page_dic' data-page='0002' data-pr='αϐαπτιστος' data-dr='αϐλαστος'><a href='http://www.tabularium.be/bailly/0002'>ἀϐάπτιστος - ἄϐλαστος</a></article>
<article class='page_dic' data-page='0003' data-pr='αϐλαυτος' data-dr='αϐροτονινος'><a href='http://www.tabularium.be/bailly/0003'>ἄϐλαυτος - ἀϐροτόνινος</a></article>
<article class='page_dic' data-page='0004' data-pr='αϐροτονιτης' data-dr='αγαθος'><a href='http://www.tabularium.be/bailly/0004'>ἀϐροτονίτης - ἀγαθός</a></article>
<article class='page_dic' data-page='0005' data-pr='αγαθοτης' data-dr='αγαλματιον'><a href='http://www.tabularium.be/bailly/0005'>ἀγαθότης - ἀγαλμάτιον</a></article>
<article class='page_dic' data-page='0006' data-pr='αγαλματοποιητικη' data-dr='αγαπαω'><a href='http://www.tabularium.be/bailly/0006'>ἀγαλματοποιητική - ἀγαπάω</a></article>
<article class='page_dic' data-page='0007' data-pr='αγαπη' data-dr='αγγελια'><a href='http://www.tabularium.be/bailly/0007'>ἀγάπη - ἀγγελία</a></article>
<article class='page_dic' data-page='0008' data-pr='αγγελιαρχος' data-dr='αγελαιος'><a href='http://www.tabularium.be/bailly/0008'>ἀγγελίαρχος - ἀγελαῖος</a></article>
<article class='page_dic' data-page='0009' data-pr='αγελαιοτροφια' data-dr='αγη'><a href='http://www.tabularium.be/bailly/0009'>ἀγελαιοτροφία - ἄγη</a></article>
<article class='page_dic' data-page='0010' data-pr='αγη' data-dr='αγκαλεω'><a href='http://www.tabularium.be/bailly/0010'>ἀγή - ἀγκαλέω</a></article>
<article class='page_dic' data-page='0011' data-pr='αγκαλη' data-dr='αγκυρια'><a href='http://www.tabularium.be/bailly/0011'>ἀγκάλη - ἀγκύρια</a></article>
<article class='page_dic' data-page='0012' data-pr='αγκυριζω' data-dr='αγμα'><a href='http://www.tabularium.be/bailly/0012'>ἀγκυρίζω - ἄγμα</a></article>
<article class='page_dic' data-page='0013' data-pr='αγμος' data-dr='αγνωδης'><a href='http://www.tabularium.be/bailly/0013'>ἀγμός - ἀγνώδης</a></article>
<article class='page_dic' data-page='0014' data-pr='αγνωμονευω' data-dr='αγοραζω'><a href='http://www.tabularium.be/bailly/0014'>ἀγνωμονεύω - ἀγοράζω</a></article>
<article class='page_dic' data-page='0015' data-pr='αγοραιος' data-dr='αγραις'><a href='http://www.tabularium.be/bailly/0015'>ἀγοραῖος - Ἀγραίς</a></article>
<article class='page_dic' data-page='0016' data-pr='αγραμματια' data-dr='αγριοτης'><a href='http://www.tabularium.be/bailly/0016'>ἀγραμματία - ἀγριότης</a></article>
<article class='page_dic' data-page='0017' data-pr='αγριοφαγος' data-dr='αγρωστης'><a href='http://www.tabularium.be/bailly/0017'>ἀγριοφάγος - ἀγρώστης</a></article>
<article class='page_dic' data-page='0018' data-pr='αγριωστινος' data-dr='αγχιστα'><a href='http://www.tabularium.be/bailly/0018'>ἀγριωστῖνος - ἄγχιστα</a></article>
<article class='page_dic' data-page='0019' data-pr='αγχιστεια' data-dr='αγω'><a href='http://www.tabularium.be/bailly/0019'>ἀγχιστεία - ἄγω</a></article>
<article class='page_dic' data-page='0020' data-pr='αγω' data-dr='αγωγος'><a href='http://www.tabularium.be/bailly/0020'>ἀγῶ - ἀγωγός</a></article>
<article class='page_dic' data-page='0021' data-pr='αγων' data-dr='αγωνοθετεω'><a href='http://www.tabularium.be/bailly/0021'>ἀγών - ἀγωνοθετέω</a></article>
<article class='page_dic' data-page='0022' data-pr='αγωνοθετης' data-dr='αδεισιδαιμονια'><a href='http://www.tabularium.be/bailly/0022'>ἀγωνοθέτης - ἀδεισιδαιμονία</a></article>
<article class='page_dic' data-page='0023' data-pr='αδεισιδαιμονως' data-dr='αδηλος'><a href='http://www.tabularium.be/bailly/0023'>ἀδεισιδαιμόνως - ἄδηλος</a></article>
<article class='page_dic' data-page='0024' data-pr='αδηλοτης' data-dr='αδιαρρηκτος'><a href='http://www.tabularium.be/bailly/0024'>ἀδηλότης - ἀδιάρρηκτος</a></article>
<article class='page_dic' data-page='0025' data-pr='αδιαρροια' data-dr='αδικεω'><a href='http://www.tabularium.be/bailly/0025'>ἀδιαρροία - ἀδικέω</a></article>
<article class='page_dic' data-page='0026' data-pr='αδικη' data-dr='αδολεσχια'><a href='http://www.tabularium.be/bailly/0026'>ἀδίκη - ἀδολεσχία</a></article>
<article class='page_dic' data-page='0027' data-pr='αδολεσχικος' data-dr='αδρος'><a href='http://www.tabularium.be/bailly/0027'>ἀδολεσχικός - ἁδρός</a></article>
<article class='page_dic' data-page='0028' data-pr='αδροσια' data-dr='αδωνις'><a href='http://www.tabularium.be/bailly/0028'>ἀδροσία - Ἄδωνις</a></article>
</section>

Voici les tests que j'ai réalisés

remi@remi-Vostro-3550:~$ alias ?
alias ?='echo $?'
remi@remi-Vostro-3550:~$ mot="'αϐλαυτος'"
remi@remi-Vostro-3550:~$ dico=/tmp/dico.xml
remi@remi-Vostro-3550:~$ cat ${dico} | xmlstarlet sel -t -c "//article[@data-pr=${mot}]"
<article class="page_dic" data-page="0003" data-pr="&#x3B1;&#x3D0;&#x3BB;&#x3B1;&#x3C5;&#x3C4;&#x3BF;&#x3C2;" data-dr="&#x3B1;&#x3D0;&#x3C1;&#x3BF;&#x3C4;&#x3BF;&#x3BD;&#x3B9;&#x3BD;&#x3BF;&#x3C2;"><a href="http://www.tabularium.be/bailly/0003">ἄϐλαυτος - ἀϐροτόνινος</a></article>remi@remi-Vostro-3550:~$ ?
0
remi@remi-Vostro-3550:~$ cat ${dico} | xmlstarlet sel -t -c "//article[@data-pr>=${mot}]"
remi@remi-Vostro-3550:~$ ?
1
remi@remi-Vostro-3550:~$ page="'0027'"
remi@remi-Vostro-3550:~$ cat ${dico} | xmlstarlet sel -t -c "//article[@data-page=${page}]"
<article class="page_dic" data-page="0027" data-pr="&#x3B1;&#x3B4;&#x3BF;&#x3BB;&#x3B5;&#x3C3;&#x3C7;&#x3B9;&#x3BA;&#x3BF;&#x3C2;" data-dr="&#x3B1;&#x3B4;&#x3C1;&#x3BF;&#x3C2;"><a href="http://www.tabularium.be/bailly/0027">ἀδολεσχικός - ἁδρός</a></article>remi@remi-Vostro-3550:~$ ?
0
remi@remi-Vostro-3550:~$ cat ${dico} | xmlstarlet sel -t -c "//article[@data-page>=${page}]"
<article class="page_dic" data-page="0027" data-pr="&#x3B1;&#x3B4;&#x3BF;&#x3BB;&#x3B5;&#x3C3;&#x3C7;&#x3B9;&#x3BA;&#x3BF;&#x3C2;" data-dr="&#x3B1;&#x3B4;&#x3C1;&#x3BF;&#x3C2;"><a href="http://www.tabularium.be/bailly/0027">ἀδολεσχικός - ἁδρός</a></article><article class="page_dic" data-page="0028" data-pr="&#x3B1;&#x3B4;&#x3C1;&#x3BF;&#x3C3;&#x3B9;&#x3B1;" data-dr="&#x3B1;&#x3B4;&#x3C9;&#x3BD;&#x3B9;&#x3C2;"><a href="http://www.tabularium.be/bailly/0028">ἀδροσία - Ἄδωνις</a></article>remi@remi-Vostro-3550:~$ ?
0
remi@remi-Vostro-3550:~$ 

Lorsque je necherche avec «=» le résultat est correct.
Avec «>=», il l'est lorsque je recherche sur un attribut dont la valeur est numérique, mais il ne l'est pas lorsque je recherche sur un attribut dont la valeur est une chaîne de caractères.

Arbiel


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 06/06/2019, à 23:11

Watael

Re : xmlstarlet : comparer des chaînes de caractères

ok, je vois mieux ce que tu fais, mais je ne comprends pas ce que tu veux obtenir.
>= signifie supérieur ou égal, cela s'applique correctement à des nombres. normal.
mais pour du texte...

est-ce que tu veux les "lignes" qui ne comportent pas le mot (une sorte de grep -v) ?
ou les "lignes" qui suivent celle qui comporte le mot ?
ou bien ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 06/06/2019, à 23:55

Arbiel

Re : xmlstarlet : comparer des chaînes de caractères

Bonsoir

Je cherche la ligne dont l'attribut data-pr vient avant ou est le mot recherché et data-dr vient après ou est le mot recherché, ce qui me permet d'obtenir la page du dictionnaire qui contient le mot recherché.

Xpath 3.0, avec lequel xmlstarlet est a priori compatible, contient des fonctions de comparaison de chaînes de caractèrès, et en particulier la fonction «compare(arg1, arg2)» qui retourne -1, 0 ou 1 selon que arg1 < arg2, arg1 = arg2 ou arg1 > arg2, qui devrait me permettre de résoudre le problème. Malheureusement, xmlstarlet n'est pas strictement compatible avec Xpath 3.0, et ne connaît pas cette fonction. Je n'ai donc aucune solution dans la voix que j'ai pour l'instant retenue pour constituer le répertoire du dictionnaire.

Je vais donc abandonner l'idée d'utiliser xml et créer un simple fichier texte sur lequel je bouclerai pour trouver la page qui m'intéresse.

L'intérêt de xml me semblait être une simplification pour la constitution au fil de l'eau de ce répertoire : en cas d'absence, je cherche dans mon dictionnaire papier et quand j'ai trouvé la page, je crée un nouvel article sans me soucier de l'ordre dans lequel sont classés les articles. Je pensais aussi à terme, en mettant ce répertoire sur un serveur, inciter d'autres hellénistes à participer à la constitution de ce répertoire.

L'utilisation d'un fichier texte peut me conduire à devoir classer les lignes par ordre alphabétique, et rend le partage plus problématique. Bien que !!

Je te remercie d'avoir essayé de me venir en aide, et de me venir fréquemment en aide.

Arbiel


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