[PHP] XML parser une balise hors d'une balise
Résolu/Fermé
canarder
Messages postés
1714
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 mai 2018
-
9 oct. 2010 à 12:56
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 - 14 mai 2011 à 20:18
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 - 14 mai 2011 à 20:18
A voir également:
- [PHP] XML parser une balise hors d'une balise
- Balise br ✓ - Forum HTML
- Xml download - Télécharger - Édition & Programmation
- Apparaitre hors ligne instagram - Guide
- Gps hors ligne - Guide
- Easy php - Télécharger - Divers Web & Internet
11 réponses
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
9 oct. 2010 à 14:04
9 oct. 2010 à 14:04
Salut,
je connais pas DOM XML pour PHP mais je peux te donner des formules XPath qui font ce que tu cherches.
Celle-ci recherche tous les noeuds <citizen> puis enlève ceux qui ont <owner> dans leurs parents :
Celle-ci est sans doute un peu plus efficace car il n'y a pas de retour en arrière :
mais elle ne marche que si les <citizen> sont à la racine du document.
Ces liens pourront te servir :
https://www.php.net/manual/fr/class.domxpath.php
http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm
;)
je connais pas DOM XML pour PHP mais je peux te donner des formules XPath qui font ce que tu cherches.
Celle-ci recherche tous les noeuds <citizen> puis enlève ceux qui ont <owner> dans leurs parents :
//citizen[not(parent::owner)]
Celle-ci est sans doute un peu plus efficace car il n'y a pas de retour en arrière :
/citizen
mais elle ne marche que si les <citizen> sont à la racine du document.
Ces liens pourront te servir :
https://www.php.net/manual/fr/class.domxpath.php
http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm
;)
canarder
Messages postés
1714
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 mai 2018
355
11 oct. 2010 à 21:54
11 oct. 2010 à 21:54
ça m'aide pas beaucoup puisque je travaille en dom ..
UP !
UP !
canarder
Messages postés
1714
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 mai 2018
355
12 oct. 2010 à 18:41
12 oct. 2010 à 18:41
UP c'est hyper urgent je devrais déjà avoir boucler ça ...
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
13 oct. 2010 à 19:33
13 oct. 2010 à 19:33
C'est tout ce que t'as dans ton XML ou tu as d'autres choses au niveau supérieur ?
Sinon tu peux partir de la racine (documentRoot) et accéder tout de suite à citizen, comme ça tu n'auras que ceux du premier niveau...
Sinon tu récupères tous les citizen puis tu testes ceux qui ont owner pour parent, et tu vires ceux-là.
Bon courage ;)
Sinon tu peux partir de la racine (documentRoot) et accéder tout de suite à citizen, comme ça tu n'auras que ceux du premier niveau...
Sinon tu récupères tous les citizen puis tu testes ceux qui ont owner pour parent, et tu vires ceux-là.
Bon courage ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
canarder
Messages postés
1714
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 mai 2018
355
Modifié par canarder le 13/10/2010 à 22:10
Modifié par canarder le 13/10/2010 à 22:10
il y a des choses avant, je peux pas te donner le lien du xml, c'est perso ...
mais un morceau :
Je ne comprend pas ce que tu propose, je travaille en DOM XML :
Sinon une erreur même si c'est hs, j'ai :
Parse error: syntax error, unexpected T_IF in **** on line 4
et j'ai oublié aucun point virgule ni aucune parenthèse ou autre, j'ai rien avant ce code, ça marchait avec un autre fichier mais un truc manquait je l'ai refais.
mais un morceau :
<hordes> <headers> <owner> <citizen></citizen> // je ne veux pas <myZone/> </owner> <game/> </headers> ... <citizen></citizen> (il y en a de 1 à 40 ici) <citizen></citizen> <citizen></citizen> ... </hordes>
Je ne comprend pas ce que tu propose, je travaille en DOM XML :
$xml = "fichier.xml"; $dom = new DOMDocument(); if (!$dom->load($xml)) { // ici on est pas connecté echo "erreur ..."; exit; } else { // ici pas d'erreur echo "pas erreur"; ... }
Sinon une erreur même si c'est hs, j'ai :
Parse error: syntax error, unexpected T_IF in **** on line 4
<?php session_start() if(!isset($_POST['key'])) { // <- ici l'erreur mais je vois pas ... session_destroy(); header("Location: /"); // key non envoyé, on envoit à l'accueil exit; } ... ?>
et j'ai oublié aucun point virgule ni aucune parenthèse ou autre, j'ai rien avant ce code, ça marchait avec un autre fichier mais un truc manquait je l'ai refais.
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
14 oct. 2010 à 11:30
14 oct. 2010 à 11:30
As-tu consulté la doc que je t'ai donnée (pour gérer le XPath avec DOM XML) ?
https://www.php.net/manual/fr/class.domxpath.php
Pour ton erreur, il manque un point-virgule après session_start() .
Sinon en fait, l'extension est mappée comme en JavaScript (heureusement), ce qui fait que j'ai pu m'en sortir sans connaître. J'ai pris la peine de faire des tests sur mon propre serveur, tu as de la chance !
Et un conseil : apprends à lire la doc du DOM officiel, c'est super utile.
http://www.w3.org/TR/DOM-Level-2-Core/core.html
;)
https://www.php.net/manual/fr/class.domxpath.php
Pour ton erreur, il manque un point-virgule après session_start() .
Sinon en fait, l'extension est mappée comme en JavaScript (heureusement), ce qui fait que j'ai pu m'en sortir sans connaître. J'ai pris la peine de faire des tests sur mon propre serveur, tu as de la chance !
$hordesChildren = $dom->documentElement->childNodes; $citizens = array(); for ($i = 0; $child = $hordesChildren->item($i); $i++) { if ($child->nodeType == XML_ELEMENT_NODE && $child->tagName == 'citizen') { $citizens[] = $child; }; }; // $citizens est un array contenant seulement les <citizen> directement enfants de <hordes>
Et un conseil : apprends à lire la doc du DOM officiel, c'est super utile.
http://www.w3.org/TR/DOM-Level-2-Core/core.html
;)
canarder
Messages postés
1714
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 mai 2018
355
15 oct. 2010 à 08:50
15 oct. 2010 à 08:50
merde j'ai pas vu pour le point-virgule -_-'
ouai je vais apprendre, mais je fais pas beaucoup de javascript je comprenais pas trop le dom js ...
ouai je vais apprendre, mais je fais pas beaucoup de javascript je comprenais pas trop le dom js ...
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
15 oct. 2010 à 13:23
15 oct. 2010 à 13:23
En fait c'est ça qui est magique avec le DOM : ça ne dépend pas du langage !
N'oublie pas le bouton résolu ;)
N'oublie pas le bouton résolu ;)
Templier Nocturne
Messages postés
7734
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 104
1 avril 2011 à 14:05
1 avril 2011 à 14:05
t'aurais pû demander sur la dev'list, on se serait fait un plaisir de te répondre ;)
- TheFireNight
- TheFireNight
canarder
Messages postés
1714
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 mai 2018
355
30 avril 2011 à 20:55
30 avril 2011 à 20:55
la dev'list ? en fait j'ai trouvé mieux je vais poster le code
Templier Nocturne
Messages postés
7734
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 104
2 mai 2011 à 15:30
2 mai 2011 à 15:30
cette personne (sans vous raconter sa vie, elle risquerait de m'en vouloir), développe un site communautaire et d'autres personnes (dont moi) développent aussi ce genre de sites, réunis autour d'une mailing list qu'on appelle la dev'list. cette liste est plutot la pour s'organiser, mais je pense que pour demander un coup de main, on peut y faire un tour, on est sûr d'avoir une réponse dans l'heure pour ce genre de problèmes :)
Templier Nocturne
Messages postés
7734
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 104
2 mai 2011 à 15:34
2 mai 2011 à 15:34
ha ben cette personne, il s'avère que c'est toi :/
si tu as le node owner, c'est que tu as l'accès sécurisé, donc je n'ai pas besoin de t'indiquer le lien pour la dev'list je pense. au besoin, MP moi sur CCM pour que je te le redonne :)
si tu as le node owner, c'est que tu as l'accès sécurisé, donc je n'ai pas besoin de t'indiquer le lien pour la dev'list je pense. au besoin, MP moi sur CCM pour que je te le redonne :)
canarder
Messages postés
1714
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 mai 2018
355
Modifié par canarder le 30/04/2011 à 21:06
Modifié par canarder le 30/04/2011 à 21:06
j'ai trouvé :
????? canarder ?????
Le Renard qui règne sur le WEB : Firefox
<?php $xml = "http://site.com/xml"; $dom = new DOMDocument(); $dom->load($xml); $nodeName = "node"; // nom de la node (ici pour <node>) $nmbr = 0; // numéro de la node, la première étant 0 et la deuxième 1 (etc ...) $attr = $dom->getElementsByTagName($nodeName)->item($nmbr)->getAttribute("attr"); $val = $dom->getElementsByTagName($nodeName)->item($nmbr)->nodeValue; ?>
????? canarder ?????
Le Renard qui règne sur le WEB : Firefox
Templier Nocturne
Messages postés
7734
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 104
2 mai 2011 à 15:47
2 mai 2011 à 15:47
tien, moi je fais comme ça :
là, ça te créé un tableau avec l'ensemble des pseudos des citoyens
c'est pas du DOM (parce que je ne sais pas l'utiliser) mais ça marche :)
$url = ('http://www.********.fr/xml/?k='.$API.';sk=****************'); // Ouverture du flux $xml = @simplexml_load_file($url); $pseudo = $xml->headers[0]->owner[0]->citizen[0]['name']; // exemple avec xpath $citizens = $xml->xpath('//citizens/citizen'); // récupere un tableau avec les citoyens $nb = 0; // parcours du tableau et affichage de tous les noms foreach($citizens as $citizen) { $nb ++; $citoyen[$nb] = .$citizen['name']; }
là, ça te créé un tableau avec l'ensemble des pseudos des citoyens
c'est pas du DOM (parce que je ne sais pas l'utiliser) mais ça marche :)
canarder
Messages postés
1714
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 mai 2018
355
14 mai 2011 à 19:38
14 mai 2011 à 19:38
c'est vrai ça à l'air un peu plus simple, y a-t-il des problèmes si la balise n'existe pas ? (= api non valide ou mort non validée)
Templier Nocturne
Messages postés
7734
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
21 mai 2016
1 104
14 mai 2011 à 20:18
14 mai 2011 à 20:18
le traditionnel Not_In_Game ou invalid_keys :)
si tu tente de parser tout de même, il ne se passe juste rien :
il va chercher dans le XML
il va trouver du vide
il va stoker ce vide dans une variable
et tant qu'il y aura des valeurs à récupérer dans cette variable, elle seront récupérés dans des variables distinctes; pas de contenu, pas de nouvelles variables :)
si tu tente de parser tout de même, il ne se passe juste rien :
il va chercher dans le XML
il va trouver du vide
il va stoker ce vide dans une variable
et tant qu'il y aura des valeurs à récupérer dans cette variable, elle seront récupérés dans des variables distinctes; pas de contenu, pas de nouvelles variables :)
canarder
Messages postés
1714
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
13 mai 2018
355
16 oct. 2010 à 14:03
16 oct. 2010 à 14:03
c'est pas ta réponse qui m'a fait résoudre le problème (et je suis assez ancien pour connaître le bouton résolu)
en fait, si la valeur d'un attribut était égale à celui dans owner, j'affichais rien
en fait, si la valeur d'un attribut était égale à celui dans owner, j'affichais rien