[RESOLU] Renommer balise XML

Eléphant du PHP | 54 Messages

11 juil. 2013, 17:28

Bonjour,

Je rencontre un problème avec des balises XML qui je pense ont un nom incorrect ou non reconnu. Voila pourquoi je souhaite renommer ces balises.

Dans mon exemple je veux intégrer les informations du fichier XML dans une BDD.
Voici le code :
$articles_xml = simplexml_load_file('images/base.xml');
foreach ($articles_xml->Table as $table) {
     $requete = "INSERT INTO table (MARQUE, MODELE, REFMARQUE, REFMODELE) VALUES (''".$table->Marque."', '".$table->Modèle."', '".$table->Réf._MA."',  '".$table->Réf._MO."')";
}
L'intégration des données fonctionne sauf pour les 2 balises $table->Réf._MA et $table->Réf._MO où j'obtiens les 2 erreurs suivantes :
Use of undefined constant _MA - assumed '_MA'
Use of undefined constant _MO - assumed '_MO'

Je pense que c'est le "point" présent dans le nom de la balise qui pose problème, voila pourquoi je souhaite renommer ces balises à moins qu'il y ait une autre solution :?:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 juil. 2013, 19:24

salut,


tu ne peux pas mettre de point dans le nom de variable php c'est la marque de la concaténation donc la php essai de trouver un méthode qui a pour nom "Réf" et concatéber avec la constante "_MO" qui n’existe pas ;)


je te conseil un var_dump($table); pour voir ce que contient cet objet (et retrouver tes p'tits).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 54 Messages

12 juil. 2013, 09:07

Alors var_dump($table); m'affiche :
object(SimpleXMLElement)[5]
  public 'Marque' => string 'AUDI' (length=4)
  public 'Modèle' => string ' A4' (length=2)
  public 'Réf._MA' => string '0123456789' (length=10)
  public 'Réf._MO' => string '1234' (length=4)
Du coup comment récupérer les 2 derniers objets puisque $table->Rèf._MA n'est pas possible à cause du point ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 juil. 2013, 15:45

Tu peux par courir un objet avec un foreach.
En fonction de ce que tu trouve dans l'index du SET / affiche l'info.
Tu peux chercher _MA et _MO et tu aura l'info en fonction ;)

Tu peux aussi faire une requête xpath pour obtenir l'info.

Si tu a la main sur la génération du fichier XML (ou au moins la possibilité d'une suggestion) faut virer les accents et le points c'est pas top et pas forcément utile ;)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 54 Messages

12 juil. 2013, 16:27

Malheureusement je n'ai pas la possibilité d'interagir avant la génération du XML :(

Donc du coup en faisant :
$ma = $articles_xml->xpath('Table/Réf._MA');
Je récupère bien la valeur avec $ma[0] merci pour ton aide.

Par contre je n'ai pas compris ta première phrase #-o

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 juil. 2013, 19:37

faut enlever l'espace être par et courir :)

tu peux utiliser foreach pour boucler sur les propriétés d'une classe
exemple
<?php

$o = new StdClass();
$o->a = 'la lettre a';
$o->b = 'la lettre b';
// etc
foreach($o as $index => $valeur){
    echo 'nom de la propriété de la classe : '.$index.' et la valeur : '.$valeur.'<hr />';
}
qui affiche
nom de la propriété de la classe : a et la valeur : la lettre a
nom de la propriété de la classe : b et la valeur : la lettre b
si le sujet est résolu pense au bouton en haut a coté du titre ;)

merci

@+
Il en faut peu pour être heureux ......