Allimenter un xml avec une boucle foreach [Résolu]

Signaler
-
 hypo -
Bonjour,

alors voilà mon probleme:

J'ai une chaine de caractere dans une variable $bloc:
string(152) "Type de conditionnement=>Détail;Type=>Stylos roller;Couleur=>Noir;Reliure=>Non;Type fermeture=>Capuchon;Encre=>Encre liquide;Pointe=>Pointe extra fine;"

et je dois la parsé pour la mettre dans du xml, pour obtenir ceci:

<Type de conditionnement>
Détail
</Type de conditionnement>
<Type>
Stylos
</Type>
etc ..

pour se faire j'utilise le code suivant:

$doc = new DOMDocument('1.0');

$eandata = $doc->createElement("eandata");
$doc->appendChild($eandata);

$caracs_explode = explode( ';', $bloc);

foreach ($caracs_explode as $val) {

	$single_carac = explode('=>', $val);
	$xml_carac = $doc->createElement($single_carac[0], $single_carac[1]);
	$eandata->appendChild($xml_carac);

}


Mais j'obtiens cette erreur:


Fatal error: Uncaught DOMException: Invalid Character Error in /var/www/html/api/lookup_metas.php:327 Stack trace: #0 /var/www/html/api/lookup_metas.php(327): DOMDocument->createElement('Type de conditi...', 'Detail') #1 /var/www/html/api/lookup_metas.php(416): metas_lookup() #2 {main} thrown in /var/www/html/api/lookup_metas.php on line 327

Comment puis-je régler celle-ci s'il vous plait ?

2 réponses

Messages postés
11177
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 mai 2020
635
bonjour,
ton message se produit sur la ligne 327, il est donc utile de nous préciser à quelle ligne de code cela correspond.
as-tu fait des essais avec d'autres données, pour voir ce qui provoquait l'erreur?
moi je commencerais avec
"a=>b;c=>d;"

et puis me rapprocherais petit à petit des données finales, pour découvrir ce qui provoque cette erreur.
Messages postés
28929
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 mai 2020
2 466
Bonjour,

Les Balises XML (comme le html....) n'autorisent pas, à ma connaissance, l'utilisation d'espaces..
Donc

<Type de conditionnement>

retourne une erreur !

Remplace les espaces par des underscore

<Type_de_conditionnement>


Et si tu as d'autres caractères comme les guillemets, les apostrophes, les slash.. pense à nettoyer la chaine...
En effet, çà a résolu le problème !
Il y avait aussi un ptit soucis avec le ';' à la fin de la chaine qui donnait 2 champs vide dans le xml (un ptit substr et c'etait réglé). En tout cas merci a tout les deux et bonne soirée !