concaténation de xpath

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : concaténation de xpath

Re: concaténation de xpath

par McCallum » 30 oct. 2015, 21:46

Bonsoir,
Merci @rthur !

Donc si je comprends bien mes $node deviennent des $variable. Mais comment ne pas mélanger les données. Autrement dit :
verb1, id1
verb2, id2, entity2
verb3, id3
Il ne faut pas que j'obtienne verb1, id3 par exemple.

Après avoir cherché toute l'après-midi, j'ai l'impression que ma réponse se trouve ici et ici :priere: Mais je me trompe peut-être ...

Proposition (inexacte je sais, mais dans l'esprit) :

Code : Tout sélectionner

<?php $doc = new DOMDocument; $doc->loadXML('<lg> <l n="6b" [b]xml:id[/b]="ktu1.3_ii_6b"><w type="[b]verb[/b]" ana="#ḪṢB01">tḫtṣb</w></l> <l n="7" [b]xml:id[/b]="ktu1.3_ii_7"><w type="verb" ana="#MḪṢ02">tmḫṣ</w></l> <l n="5b-6a" [b]xml:id[/b]="ktu1.3_ii_6a"><g>.</g><name type="[b]entity[/b]" ana="#ANT">ʾnt</name><w type="[b]verb[/b]" ana="#MḪṢ01">tmtḫṣ</w></l>                   </lg>'); $xpath = new DOMXPath($doc); // Register PHP functions (no restrictions) $xpath->registerPHPFunctions();   foreach ($node as $n) {   $nodes = $xpath->query( "//lg/../w[@type='verb']"); /* en fait, je ne sais pas si le spath est correct, je veux dire que le @type w peut se trouver partout dans la hiérarchie après <lg> */   $nodes1 = $xpath->query( "//lg/l[@xml:id='*']"); /* je sais que ce n'est pas exact, xml:id n'est pas un @type, donc je ne sais pas comment l'exprimer */   $nodes2 = $xpath->query( "//lg/.../name[@name='*']"); /*idem*/ } echo 'xml:id'. " " .'verb'. " " .'entity' "<br>"; ?>
La difficulté réside dans le fait que les $node dans le fichier xml ne sont pas toujours classés de la même manière et n'ont aucune fonction logique dans leur hiérarchisation.

#-o J'espère qu'on peut au moins comprendre ce que j'essaye d'expliquer.... Dans le cas contraire, j'en suis vraiment désolée...

D'avance, merci.

McCallum

Re: concaténation de xpath

par @rthur » 30 oct. 2015, 11:42

Basiquement :
- Xpath : permet d'extraire des données depuis un XML
- XSLT : permet d'extraire des données depuis un XML et les mettre en forme dans un autre format statique
- PHP : permet d'exécuter un traitement plus complexe : utiliser Xpath pour aller extraire des données, appliquer une XSLT pour obtenir un autre format de données, faire des requêtes SQL si tu as besoin de faire des vérifications, etc...

Donc si tu veux concaténer 2 valeurs extraites d'un XML :
- soit tu le fais avec une XSLT
- soit tu le fais avec PHP

Xpath ne sert (principalement) qu'à extraire des données.
Dans ton cas si tu as des traitements à appliquer type requête SQL de vérification, utilise PHP ça sera + simple : extrait les infos qui t'interesse avec des xpath et traite les avec PHP, où la concaténation se fait simplement avec un point :
<?php
$variable1="Hello";
$variable2="World";
echo $variable1." ".$variable2; // Affichera : Hello World

Re: concaténation de xpath

par McCallum » 30 oct. 2015, 00:05

:roll: Je relance ma question initiale, car je suis vraiment bloquée pour poursuivre dans le développement de mon script.

Encore merci à tous pour votre réactivité et la qualité de vos réponses ;)
Je recommanderais à la petite équipe de philologues qui essayent de sortir de la TEI de temps à autre !

McCallum

Re: concaténation de xpath

par McCallum » 29 oct. 2015, 21:25

Bonsoir,

Merci de ta réponse :D , mais
Xpath te permets de récupérer facilement des valeurs, mais si tu veux faire des transformations sur l'affichage, c'est XSLT qu'il faut utiliser.
Oui, je sais, mais il semblerait, selon moogli que ce ne soit pas possible :
xslt c'est puissant mais ne feras une requête sql pour vérifier la présence de la donnée en base
C'est pourquoi, j'ai commencé à travailler avec SimpleXMLElement, donc j'aimerais autant poursuivre mon exploration pour organiser mon datamining XML-TEI > mySQL.

Il n'est dont pas possible de "concaténer" avec xpath ?
D'avance, merci pour les suggestions.

McCallum

Re: concaténation de xpath

par @rthur » 29 oct. 2015, 20:59

Bonjour,

Xpath te permets de récupérer facilement des valeurs, mais si tu veux faire des transformations sur l'affichage, c'est XSLT qu'il faut utiliser.
Voici un tuto plutôt bien fait :
http://haypo.developpez.com/tutoriel/xml/xslt/

concaténation de xpath

par McCallum » 29 oct. 2015, 20:02

Bonjour,

Je cherche à importer certaines données groupées en elles.
J'ai regardé sur la page simpleXMLElement::xpath, ce lien paraissait intéressant, et bien qu'il cherche des valeurs multiples, il ne répond pas à mon besoin car je ne vois pas de quelle manière il permet d'ordonner.

Exemple de départ (faux, je sais) :

Code : Tout sélectionner

<?php $string = <<<XML <lg> <l n="6b" xml:id="ktu1.3_ii_6b"><w type="verb">tḫtṣb</w></l> <l n="7" xml:id="ktu1.3_ii_7"><w type="verb">tmḫṣ</w></l> </lg> XML; $xml = simplexml_load_string($string); foreach($xml->xpath('//lg') as $item) {   # => ici exprimer que je souhaite "concaténer" (mettre à la suite) ("//lg/l/w[@type='verb']") et ("//lg/l[@type='xml:id']")  }  ?>
Je voudrai grouper, c'est à dire selon mon modèle précédent, je voudrai obtenir :
- tḫtṣb (verb), ktu1.3_ii_6 (xml:id)
- tmḫṣ (verb), ktu1.3_ii_7 (xml:id)

J'ai évidemment regarder le W3C.
Le seul résultat que j'ai pu trouver, et ce n'est pas nécessaire pour SImpleXMLElement::xpath est peut-être string-join ; j'ai encore cherché pour l'application à SimpleXMLElement, sans succès.

Quelques pistes ?
D'avance, merci.

McCallum