bonjour a tous,
je voudrais savoir s'il y a un moyen de récupérer dans un fichier un portion de code XML (délimité par une balise et sa balise fermante) qui est sur un autre fichier.
merci








bonjour a tous,
je voudrais savoir s'il y a un moyen de récupérer dans un fichier un portion de code XML (délimité par une balise et sa balise fermante) qui est sur un autre fichier.
merci
avec la librairie dom ou simpleXML c'est très possible
tu peux y trouver de très bon tutoriaux sur la partie cours PHP![]()








j'ai lu le tuto de DOM,j'ai pas trouvé ce que je cherche,je reviens a un exemple du tuto de DOM:
je voudrais faire un truc du genre,récupérer ce qu'il y a entre la balise <continents> et </continents>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?> <!DOCTYPE continents SYSTEM "test.dtd"> <continents> <europe> <pays regime="republique">France</pays> <pays regime="monarchie constitutionnelle">Belgique</pays> <pays regime="monarchie constitutionnelle">Espagne</pays> </europe> <asie> <pays regime="empire">Japon</pays> <pays>Inde</pays> </asie> </continents>
pour avoir en sortie ceci:
pouvez vous m'aider svp?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <europe> <pays regime="republique">France</pays> <pays regime="monarchie constitutionnelle">Belgique</pays> <pays regime="monarchie constitutionnelle">Espagne</pays> </europe> <asie> <pays regime="empire">Japon</pays> <pays>Inde</pays> </asie>
Récupérer les éléments fils de <continents> :
Donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?php header('Content-Type: text/plain') ; $dom = new DOMDocument( ) ; $dom->load('chemin/vers/fichier.xml') ; $continents = $dom->getElementsByTagName('continents')->item(0) ; $buffer = '' ; for ( $i = 0 ; $i < $continents->childNodes->length ; $i++ ) { $buffer .= $dom->saveXML($continents->childNodes->item($i)) ; } echo $buffer ; ?>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <europe> <pays regime="republique">France</pays> <pays regime="monarchie constitutionnelle">Belgique</pays> <pays regime="monarchie constitutionnelle">Espagne</pays> </europe> <asie> <pays regime="empire">Japon</pays> <pays>Inde</pays> </asie>








merci beaucoup, juste une dernière question, est-ce que c'est possible d'afficher dans le même fichier php, car là à l'exécution il m'ouvre la portion de code que je veux dans un buffer !!
merci
Oui, suffit d'adapter le script que j'ai collé !!








merci bcp,ça marche,
encore une question,
je modifie le xml un peu
si je veux par exemple récupérer ce qu'il y a entre la balise <continent> tel que id="0" comment modifier le script pour cela?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <continents id="0"> <europe> <pays regime="republique">France</pays> <pays regime="monarchie constitutionnelle">Espagne</pays> </europe> <asie> <pays regime="empire">Japon</pays> <pays>Inde</pays> </asie> </continents> <continents id="1"> <afrique> <pays>Algérie</pays> <pays>Kenya</pays> </afrique> <amerique> <pays>Colombie</pays> </amerique> </continents>
merci encore
Il faut boucler sur les <continents> récupérés avec getElementsByTagName( ) et tester pour chaque si getAttribute('id') === '0'.
http://www.php.net/manual/fr/domdocu...sbytagname.php
http://www.php.net/manual/fr/domelem...tattribute.php
Bon développement,








j'ai essayé ceci
mais ça marche pas,tu peux me corriger mon code stp?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 .... $continents = $dom->getElementsByTagName('continents')->item(0) ; foreach ($continents as $x){ if ($x->getAttribute('id')=='0') { $buffer = '' ; for ( $i = 0 ; $i < $continents->childNodes->length ; $i++ ) { $buffer .= $dom->saveXML($continent->childNodes->item($i)) ; }} ....
Il faut enlever le ->item(0), autrement tu ne récupères que le 1er <continents>.








ça marche tjr pas!!
mon script:
mon xml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20header('Content-Type: text/plain') ; $dom = new DOMDocument( ) ; $dom->load('f1.xml') ; $continents = $dom->getElementsByTagName('continents'); foreach ($continents as $x){ if ($x->getAttribute('id')=='0') { $buffer = '' ; for ( $i = 0 ; $i < $v1->childNodes->length ; $i++ ) { $buffer .= $dom->saveXML($v1->childNodes->item($i)) ; }}} $xs='psm/m3.txt'; $fichier = fopen($xs, 'a+'); fputs($fichier,$buffer); fclose($fichier);
apparament il ne rentre meme pas dans le IF
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <test> <continents id="0"> <europe> <pays regime="republique">France</pays> <pays regime="monarchie constitutionnelle">Espagne</pays> </europe> <asie> <pays regime="empire">Japon</pays> <pays>Inde</pays> </asie> </continents> <continents id="1"> <afrique> <pays>Algerie</pays> <pays>Kenya</pays> </afrique> <amerique> <pays>Colombie</pays> </amerique> </continents> </test>
D'où vient $v1 ?
De plus c'est généralement une mauvaise idée d'utiliser le + dans les modes d'ouverture de fichier.








oups dsl erreur de frappe, c'est plutot ceci:
mais ça regle tjr pas le probleme!!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 header('Content-Type: text/plain') ; $dom = new DOMDocument( ) ; $dom->load('f1.xml') ; $continents = $dom->getElementsByTagName('continents'); foreach ($continents as $x){ if ($x->getAttribute('id')=='0') { $buffer = '' ; for ( $i = 0 ; $i < $continents->childNodes->length ; $i++ ) { $buffer .= $dom->saveXML($continents->childNodes->item($i)) ; }}} $xs='psm/m3.txt'; $fichier = fopen($xs, 'a+'); fputs($fichier,$buffer); fclose($fichier);
Vu que c'est tjs mieux avec du code correctement indenté et des variables au nom pertinent je le refais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <?php header('Content-Type: text/plain') ; $dom = new DOMDocument( ) ; $dom->load('f1.xml') ; $buffer = '' ; foreach ( $dom->getElementsByTagName('continents') as $continent ) { if ( $continent->getAttribute('id') === '0' ) { foreach ( $continent->childNodes as $child ) { $buffer .= $dom->saveXML($child) ; } } } echo $buffer ; ?>
Partager