[RESOLU] trouver des attributs et leur valeur avec xpath

Eléphanteau du PHP | 18 Messages

28 oct. 2015, 23:37

Bonsoir,

Je souhaite importer certains attributs XML-TEI dans un BD mysql existante.
Pour le moment, je cherche ces attributs avec xpath de SimpleXML.

Je suis complètement néophyte, donc je tâtonne.
Est-ce que la classe SimpleXMLElement::xpath est correcte ?
<?php
$string = <<<XML
<w type="headword" subtype="unvocalized">šbʿ</w>
XML;

$xml = new SimpleXMLElement($string);

/* ici je cherche @headword */
$result = $xml->xpath('headword');

while(list( , $node) = each($result)) {
  echo 'headword: ',$node,"\n";
}
?>
Manifestement, j'ai dû faire une erreur car rien de s'affiche, alors pour que @type headword šbʿ devrait s'afficher.
Une suggestion ?

D'avance, merci.

McCallum

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

28 oct. 2015, 23:51

Bonjour,

Ton xpath est simplement faux je pense.
Ça devrair mieux marcher avec :
$result = $xml->xpath("//w[@type='headword']");
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 18 Messages

29 oct. 2015, 10:50

Bonjour,
et merci @arthur !

Dans mon script XML-TEI, j'ai :

Code : Tout sélectionner

<form type="inflected"> <w type="headword" subtype="unvocalized">šbʿ</w> .... </form>
Est-il possible d'écrire que je cherche le mot écrit entre <w></w> dans //form[@type=inflected], dans le cas précis šbʿ ? Pour une raison simple est qu'il y a des @type=headword qui ne m'intéresse pas.
J'ai cherché, mais je ne trouve pas comment exprimer cette demande.
D'avance, merci.

McCallum

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

29 oct. 2015, 15:10

Tu n'as pas dû chercher bien longtemps ;-)

Code : Tout sélectionner

//form[@type='inflected']/w[@type='headword']
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 18 Messages

29 oct. 2015, 16:38

Merci !
Tu n'as pas dû chercher bien longtemps ;-)
#-o Disons que je n'ai peut-être pas formulé ma recherche comme il faut. Ce n'est pas évidemment sur le site php.net, surtout quand on est pas habitué à ce langage — je suis plutôt TEI.
Ne désespérons pas...
Une fois que j'aurais acquis certaines bases, ça devrait aller. Encore un peu de patience :mrgreen:
Encore merci !

Eléphanteau du PHP | 18 Messages

29 oct. 2015, 16:50

J'avais mis résolu, mais en fait, ça ne fonctionne pas. Pour le moment, je fais des tests avec un petit bout de script évidemment :

Code : Tout sélectionner

<?php $string = <<<XML <form type="inflected"> <w type="headword" subtype="unvocalized">šbʿ</w> XML; $xml = new SimpleXMLElement($string); /* ici je cherche @infected */ $result = $xml->xpath("//form[@type='inflected']/w[@type='headword']"); while(list( , $node) = each($result)) {   echo 'inflected',$node,"\n"; } ?>
Qu'est-ce que j'ai manqué ? ??? Pour rappel, c'est @inflected => šbʿ qui devrait s'afficher.
Un avis sur la question ?

Je poursuis mon investigation.
McCallum

Mammouth du PHP | 2703 Messages

29 oct. 2015, 16:53

le xml, ne contenant pas </form> est invalide ?

Eléphanteau du PHP | 18 Messages

29 oct. 2015, 16:57

Merci or 1 ! Chapeau pour la réactivité ! :D

Oooooh !!!! J'ai eu beau relire et relire et Atom ne m'a même pas signalé d'erreur :(
Donc je remets « résolu ».