Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1505 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Objet]xml et simplexml.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Objet]xml et simplexml.

n°1273474
2xyo
2*yo = yoyo
Posté le 26-12-2005 à 22:14:52  profilanswer
 

Bonsoir à tous,  
 
Après quelques mois sans toucher au php et forcé de constater que CS ça rends abruti, je me replonge aux sources...
 
Mon fichier xml :

Code :
  1. <?xml version="1.0"?>
  2. <media>
  3. <text>
  4.   <id>titre</id>
  5.   <fr>le jolie titre</fr>
  6.   <en>the nice title</en>
  7. </text>
  8. <text>
  9.   <id>meta01</id>
  10.   <l>la premiere balise</l>
  11.   <en>the first tag</en>
  12. </text>
  13. </media>


 
Mon fichier php :

Code :
  1. <?php
  2. $xml = simplexml_load_file('./lang/lang.xml');
  3. echo "le titre est $titre et la première balise est $meta01";
  4. ?>


 
Le compte rendu simple xml :

Code :
  1. SimpleXMLElement Object
  2. (
  3.     [text] => Array
  4.         (
  5.             [0] => SimpleXMLElement Object
  6.                 (
  7.                     [id] => titre
  8.                     [fr] => le jolie titre
  9.                     [en] => the nice title
  10.                 )
  11.             [1] => SimpleXMLElement Object
  12.                 (
  13.                     [id] => meta01
  14.                     [fr] => la premiere balise
  15.                     [en] => the first tag
  16.                 )
  17.         )
  18. )


 
Ma question : Comment via simplexml(de préférence), dom attribuer par exemple "le jolie titre" à la variable $titre.
Toutes documentations, liens, exemples, solutions seront le bienvenue.  
 
Merci et bonne soirée à tous.


Message édité par 2xyo le 29-12-2005 à 15:14:53
mood
Publicité
Posté le 26-12-2005 à 22:14:52  profilanswer
 

n°1274205
2xyo
2*yo = yoyo
Posté le 28-12-2005 à 20:45:48  profilanswer
 

Même pas 30 lectures en 24h ! Moi qui croyait que l'xml attirait les foules...


Message édité par 2xyo le 29-12-2005 à 15:12:04
n°1274466
2xyo
2*yo = yoyo
Posté le 29-12-2005 à 15:13:08  profilanswer
 

De nouveau bonjur à tous,  
j'ai un peu avancé dans mon code, mais pas temps que ça...
 
Voici mon code actuel :

Code :
  1. <?php
  2. $xml = simplexml_load_file('./lang.xml');
  3. $lg = "fr";
  4. $id = "titre";
  5. $titre = $xml->text[0]->$lg;
  6. print "<br/>lg = ".$lg."<br/>"
  7.      ."id = ".$id."<br/>"
  8.      ."titre = ".$titre
  9.      ."<br/><br/>";
  10.    
  11. $titre2 = $xml->text[0]->$id->$lg;
  12. print "<br/>lg = ".$lg."<br/>"
  13.      ."id = ".$id."<br/>"
  14.      ."titre2 = ".$titre2;
  15. ?>


Qui me restitue :
 

Code :
  1. lg = fr
  2. id = titre
  3. titre = le jolie titre
  4. lg = fr
  5. id = titre
  6. titre2 =


Donc, comme vous le constater, ça ne fonctionne pas...
En effet, comme j'ai éssayé de l'expliquer en haut, je souhaiterais attribuer à la variable $titre en fonctione de $lg(fr|en) le contenu de (fr|en).
 
Toutes aides seront le bienvenue.

n°1274564
2xyo
2*yo = yoyo
Posté le 29-12-2005 à 17:54:37  profilanswer
 

Me revoilà de nouveau, je ne lache pas l'affaire... :na:  
 
Me voici donc pourvu d'un nouveau code agrémenté xpath :

Code :
  1. <?php
  2. $xml = simplexml_load_file('./lang.xml');
  3. print_r($xml);
  4. $lg = "en";
  5. $id = "titre";
  6. $titre = $xml->text[0]->$lg;
  7. print "<br/>lg = ".$lg."<br/>"
  8.      ."id = ".$id."<br/>"
  9.      ."titre = ".$titre
  10.      ."<br/><br/>";
  11.    
  12. $titre2 = utf8_decode(trim($xml->xpath("//text[@id='titre']/".$lg)[0]));
  13. print_r($titre2);
  14. print "<br/>lg = ".$lg."<br/>"
  15.      ."id = ".$id."<br/>"
  16.      ."titre2 = ".$titre2;
  17. ?>


Et d'un nouveau fichier xml :

Code :
  1. <?xml version="1.0"?>
  2. <media>
  3. <text id="titre">
  4.     <fr>le jolie titre</fr>
  5.     <en>the nice title</en>
  6. </text>
  7. <text id="balise">
  8.     <fr>la premiere balise</fr>
  9.     <en>the first tag</en>
  10. </text>
  11. </media>


 
Malheureusement j'obtient seulement : Parse error: parse error, unexpected '[' in /homepages/htdocs/xml.php5 on line 12.  
 
J'ai effectué plusieurs modifications mais sans succès. :(

n°1275057
sielfried
Posté le 30-12-2005 à 18:04:54  profilanswer
 

Pour la parse error, je crois que PHP aime pas les [] après un appel de fonction. Passe par une variable intermédiaire qui stocke le résultat de $xml->xpath.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1275994
2xyo
2*yo = yoyo
Posté le 02-01-2006 à 17:57:51  profilanswer
 

Merci beaucoup !
 
Je résume :
lanf.xml :  

Code :
  1. <?xml version="1.0"?>
  2. <media>
  3. <text id="titre">
  4.     <fr>le jolie titre</fr>
  5.     <en>the nice title</en>
  6. </text>
  7. <text id="balise">
  8.     <fr>la premiere balise</fr>
  9.     <en>the first tag</en>
  10. </text>
  11. </media>


 
 
xml.php5 :

Code :
  1. <?php
  2. $xml = simplexml_load_file('./lang.xml');
  3. print_r($xml);
  4. $lg = "en";
  5. $id = "titre";
  6. $titre = $xml->text[0]->$lg;
  7. print "<br/>lg = ".$lg."<br/>"
  8.      ."id = ".$id."<br/>"
  9.      ."titre = ".$titre
  10.      ."<br/><br/>";
  11.    
  12. $lg2 = "fr";
  13. $xptitre = $xml->xpath("//text[@id='titre']/".$lg2);
  14. $titre2 = utf8_decode(trim($xptitre[0]));
  15. print "<br/>lg2 = ".$lg2."<br/>"
  16.      ."id = ".$id."<br/>"
  17.      ."titre2 = ".$titre2;
  18. ?>

Qui nous donne :

Code :
  1. SimpleXMLElement Object
  2. (
  3.     [text] => Array
  4.         (
  5.             [0] => SimpleXMLElement Object
  6.                 (
  7.                     [fr] => le jolie titre
  8.                     [en] => the nice title
  9.                 )
  10.             [1] => SimpleXMLElement Object
  11.                 (
  12.                     [fr] => la premiere balise
  13.                     [en] => the first tag
  14.                 )
  15.         )
  16. )
  17. lg = en
  18. id = titre
  19. titre = the nice title
  20. lg2 = fr
  21. id = titre
  22. titre2 = le jolie titre


 
Donc c'est bon, ça fonctionne :)  
 
Maintenant, je vais chercher un peu avant de revenir vous embêter de trouver un moyen d'éviter de faire x fois ceci :

Code :
  1. $titre = $xml->text[0]->$lg;
  2. $balise = $xml->text[1]->$lg;
  3. $pied = $xml->text[2]->$lg;
  4. etc...


Je vais m'amuser avec les boucles...
En effet, j'ai trouver sur un forum ceci :

Code :
  1. $xml = simplexml_load_file('./lang.xml');
  2. // parcours de toutes les balises text
  3. foreach ($xml->text as $text) {
  4.    $type = $text['id'];
  5.    $contenu = $text->$lg;
  6.    echo "$type : $contenu<br />";
  7. }


C'est un peut dans ce style mais pas vraiment ça... Je ne veux pas juste lister le contenu de mon fichier xml sous une "autre forme".
En effet voici un exmple avec mysql et PEAR que j'utilisais auparavant (je sais c'est pas très propre...) :

Code :
  1. $go = @$_GET['go'];
  2. if (isset($go) && file_exists("pages/".$go.".php" )){
  3. $go = str_replace("/",'',$go);
  4. $go = str_replace("\\",'',$go);
  5. }
  6. else {
  7. $go = "index";
  8. }
  9. require 'DB.php';
  10. $dsn = 'mysql://dbo116:ms3Nvbkz@d11.utun.com/db2116';
  11. $dbh = DB::connect($dsn);
  12. if (DB::isError($dbh)) { die ($dbh->getMessage());}
  13. $assoc = $dbh->getAssoc("SELECT * FROM meta WHERE page = '$go'" );
  14. DB::isError($assoc) and print 'erreur base de donn&eacute;e'.$assoc->getMessage();
  15. echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n"
  16.     ."\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
  17.     ."<html xml:lang=\"fr\" xmlns=\"http://www.w3.org/1999/xhtml\">\n"
  18.     ."\t<head>\n"
  19.     ."\t\t<title>\n"
  20.     ."\t\t\t".$assoc[$go][0]
  21.     ."\n\t\t</title>\n"
  22.     ."\t\t<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=iso-8859-1\" />\n"
  23.     ."\t\t<meta http-equiv=\"expires\" content=\"0\" />\n"
  24.     ."\t\t<meta http-equiv=\"content-language\" content=\"fr\" />\n"
  25.     ."\t\t<meta http-equiv=\"pragma\" content=\"no-cache\" />\n"
  26.     ."\t\t<meta name=\"author\" content=\"yoyo\" />\n"
  27.     ."\t\t<meta name=\"keywords\" content=\"accueil, blog, potes, gnu, linux, hardware, site, contacte, liens, forum".$assoc[$go][2]."\" />\n"
  28.     ."\t\t<meta name=\"description\" content=\"".$assoc[$go][1]."\" />\n"
  29.     ."\t\t<meta name=\"revisit-after\" content=\"2 days\" />\n"
  30.     ."\t\t<meta name=\"date\" content=\"".$assoc[$go][3]."T20:49:37+00:00\" />\n"
  31.     ."\t\t<meta name=\"generator\" content=\"PSPad editor, www.pspad.com" />\n"
  32.     ."\t\t<meta name=\"expires\" content=\"never\" />\n"
  33.     ."\t\t<meta name=\"robots\" content=\"index,follow,noarchive\" />\n"
  34.     ."\t\t<meta name=\"rating\" content=\"general\" />\n"
  35.     ."\t\t<meta name=\"Date-Creation-yyyymmdd\" content=\"20041105\" />\n"
  36.     ."\t\t<meta name=\"DC.Title\" content=\"".$assoc[$go][0]."\" />\n"
  37.     ."\t\t<meta name=\"DC.Creator\" content=\"yoyo\" />\n"
  38.     ."\t\t<meta name=\"DC.Subject\" content=\"".$assoc[$go][1]."\" />\n"
  39.     ."\t\t<meta name=\"DC.Publisher\" content=\"yoyo\" />\n"
  40.     ."\t\t<meta name=\"DC.Contributor\" content=\"yoyo\" />\n"
  41.     ."\t\t<meta name=\"DC.Date\" content=\"".$assoc[$go][3]."\" />\n"
  42.     ."\t\t<meta name=\"DC.Type\" content=\"texte\" />\n"
  43.     ."\t\t<meta name=\"DC.Format\" content=\"text/html\" />\n"
  44.     ."\t\t<meta name=\"DC.Identifier\" content=\"http://mysite.com\" />\n"
  45.     ."\t\t<meta name=\"DC.Source\" content=\"all\" />\n"
  46.     ."\t\t<meta name=\"DC.Language\" content=\"fr\" />\n"
  47.     ."\t\t<meta name=\"DC.Relation\" content=\"index\" />\n"
  48.     ."\t\t<meta name=\"DC.Coverage\" content=\"France\" />\n"
  49.     ."\t\t<meta name=\"DC.Rights\" content=\"GNU sauf mentions contraires\" />\n"
  50.     #."\t\t<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"./style/lightblack.css\" />\n"
  51.     ."\t\t<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"./style/".$fstyle.".css\" />\n"
  52.     ."\t</head>\n"


Je cherche à avoir le même procédé d'utilisation, voir encor plus simple si c'est possible.

n°1298962
2xyo
2*yo = yoyo
Posté le 04-02-2006 à 09:55:05  profilanswer
 

Big up !  
 
 :heink:  
 
J'ai toujours pas trouvé comment faire... :ouch:
 
 
Je re-re-résume :
Mon fichier lang.xml :  

Code :
  1. <?xml version="1.0"?>
  2. <media>
  3. <text id="titre">
  4.     <fr>l_à'è"-'" )è-"éè-)é"è-)àtyi</fr>
  5.     <en>the nice title</en>
  6. </text>
  7. <text id="balise">
  8.     <fr>la premièytoytpzerytporyrre balise</fr>
  9.     <en>the first tag</en>
  10. </text>
  11. <text id="test2">
  12.     <fr>le test numéro 2</fr>
  13.     <en>The test number 2</en>
  14. </text>
  15. </media>


Mon fichier php :  

Code :
  1. $xml = simplexml_load_file('./lang.xml');
  2. $lg2 = "fr";   
  3. $titre0 = $xml->xpath("//text[@id='titre']/".$lg2);
  4. $titre = utf8_decode(trim($titre0[0]));
  5. $balise0 = $xml->xpath("//text[@id='balise']/".$lg2);
  6. $balise = utf8_decode(trim($balise0[0]));
  7. $test20 = $xml->xpath("//text[@id='test2']/".$lg2);
  8. $test2 = utf8_decode(trim($test20[0]));
  9. print "Le titre $titre<br/> avec la balise $balise<br/> et un test : $test2";


 
Je cherche le moyen d'éviter d'éffecter à chaque fois ceci pour chaque balise xml.

Code :
  1. $variable0 = $xml->xpath("//text[@id='variable2']/".$lg2);
  2. $variable2 = utf8_decode(trim($variable0[0]));


En gros, il faudrait que chaque //text[@id='unid']/".$lg2 corresponde à la varibale $unid.
 
J'ai fais quelques test avec des boucles foreach mais aucun concluant. Alors si quelqu'un pouvait me mettre sur la voie  :ange: (lien, doc, bout de code : toutes aides sont la bienvenue)


---------------
2 * yo = yoyo
n°1300011
2xyo
2*yo = yoyo
Posté le 06-02-2006 à 17:57:58  profilanswer
 

Un chti bout de code s'il vous plait :)


---------------
2 * yo = yoyo
n°1302014
2xyo
2*yo = yoyo
Posté le 09-02-2006 à 13:40:34  profilanswer
 

up  :bounce:


---------------
2 * yo = yoyo
n°1329739
2xyo
2*yo = yoyo
Posté le 21-03-2006 à 19:02:37  profilanswer
 

Un mois et demi plus tard et toujours pas trouvé !

mood
Publicité
Posté le 21-03-2006 à 19:02:37  profilanswer
 

n°1329756
Lord II
PIB2000
Posté le 21-03-2006 à 19:59:36  profilanswer
 

En deux minutes, bon j'ai un peu changé le code mais cela fonctionne. A tester sur un plus gros fichier
 

Code :
  1. $xml = simplexml_load_file('test.xml');
  2. $lg2 = "fr";
  3. foreach($xml->text as $text){
  4. ${$text['id']} = utf8_decode(trim($text->$lg2));
  5. }
  6. print "Le titre $titre<br/> avec la balise $balise<br/> et un test : $test2";


 
Enfin en un mois tu aurais du trouver. J'ai travaillé avec simplexml dans la journée alors ca aide un peu  ;)

Message cité 1 fois
Message édité par Lord II le 21-03-2006 à 20:00:35
n°1330473
2xyo
2*yo = yoyo
Posté le 22-03-2006 à 19:08:59  profilanswer
 

Lord II a écrit :

En deux minutes, bon j'ai un peu changé le code mais cela fonctionne. A tester sur un plus gros fichier
 

Code :
  1. $xml = simplexml_load_file('test.xml');
  2. $lg2 = "fr";
  3. foreach($xml->text as $text){
  4. ${$text['id']} = utf8_decode(trim($text->$lg2));
  5. }
  6. print "Le titre $titre<br/> avec la balise $balise<br/> et un test : $test2";


 
Enfin en un mois tu aurais du trouver. J'ai travaillé avec simplexml dans la journée alors ca aide un peu  ;)


Merci !!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Objet]xml et simplexml.

 

Sujets relatifs
la bonne manière de vérifier le type d'un objet ?Objet sound() dans un clip chargé par loadClip
Besoin d'aide sur setInterval et javascript orienté objet...Probleme avec les Variable dans l'objet RUN
[php] Programmation objet, probleme d'inclusionVB6 : Grid a imprimer sans l'objet "Printer"
Lier un controle textbox à une propriete d'un objetLes bases de la méthodologie objet
Créer un contrôle dans une Form depuis un objet ?VBA-ACCESS - insert objet dans fichier Excel
Plus de sujets relatifs à : [Objet]xml et simplexml.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR