include ou simplexml_load_file ?

Eléphanteau du PHP | 18 Messages

29 oct. 2015, 11:04

Bonjour,

Je me sers de SimpleXMLElement pour extraire des données d'un fichier XML-TEI.
Pour faire référence au fichier XML, dois-je utiliser include ou simplexml_load_file ?

J'ai fait un essai avec l'un et l'autre, mais sans succès. Voici mon code avec la seconde proposition après le #:

Code : Tout sélectionner

<?php include 'corpus_ilimilku.xml'; # $xml = simplexml_load_file("corpus_ilimilku.xml"); $xml = new SimpleXMLElement($string); $result = $xml->xpath("//w[@type='headword']"); while(list( , $node) = each($result)) {   echo 'headword ',$node,"\n"; } ?>
D'avance, merci de vos suggestions.

McCallum

ynx
Mammouth du PHP | 586 Messages

29 oct. 2015, 12:53

Salut,

D'après la doc, tu peux directement passer le chemin vers le fichier xml en premier paramètre du constructeur de SimpleXMLElement :
$xml = new SimpleXMLElement('corpus_ilimilku.xml');
http://php.net/manual/fr/simplexmlelement.construct.php

Bonne journée

Eléphanteau du PHP | 18 Messages

29 oct. 2015, 23:53

Bonsoir,

Merci de ta réponse ynx. J'ai complété ta réponse et ça fonctionne parfaitement !

Code : Tout sélectionner

$url = file_get_contents("testXML.xml"); $xml = new SimpleXMLElement($url);
McCallum

Eléphanteau du PHP | 18 Messages

30 oct. 2015, 00:00

Petite précision de taille quand même :
en fait, cela fonctionne à partir de mon fichier test sur mon serveur. Mais dès que je veux l'appliquer à mon fichier source (également sur mon serveur et dans le même répertoire) corpus_ilimilku.xml, ça ne fonctionne pas. Or, il est valide (selon Oxygen). Une idée ?

voici mon script :

Code : Tout sélectionner

<?php $url = file_get_contents("corpus_ilimilku.xml"); $xml = new SimpleXMLElement($url); /* 1. sans le mot "verb" qui précède le résultat */ $result = $xml->xpath("//lg/l/w[@type='verb']"); while(list( , $node) = each($result)) {   echo 'verb', '=', $node,"<br>"; } ?>
Il y a évidemment d'autres noeuds avant <lg>, mais je l'ai bien précisé avec //, n'est-ce pas ?

D'avance, merci.

McCallum