Bonjour. Je suis embourbé dans les méandres de PHP et XML dans un problème qui me tient à coeur et dont je ne parviens pas à résoudre malgré la documentation de php.net. Je ne sais même pas si je dois passer par DOMDocument ou SimpleXMLElement
voici mon problème. Je récupère une chaîne dans une table SQL (utf8) qui peut être sous 2 formes :
- une simple chaîne de texte : texte1
- une chaîne xml sous la forme [xml]texte1 <random><li>choix1</li></random>[/xml]
+ Si simple chaîne, je dois obtenir cette structure [xml]<template>texte1 <random><li>choix1</li></random></template>[/xml]
+ Si <random/> existant, je dois ajouter un 2è choix soit [xml]<template>texte1 <random><li>choix1</li><li>choix2</li></random></template>[/xml]
Il faudra donc parcourir la chaîne et voir si présence de <random/>.
J'ai commencé l'exercice avec <random/> existant :
$string = <<<XML
Texte 1
<random>
<li>choix1</li>
</random>
XML;
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadXML($string);
// créer un élement <template/>
$template = $dom->createElement('template', $string);
$dom->appendChild($template);
$root = $dom->saveXML($template); // retire <xml/> tag => <template>text1<random><li>choix1</li></random></template>
echo $root;
Ici, j'ai réussi à envelopper $string avec <template/> afin de pouvoir travailler sur tous les noeuds (texte, random et li)
Le plus dur vient après : comment detecter <random/> et ajouter un <li/>
J'ai tenté la suite suivante :
$random = $dom->getElementsByTagName('random');
if (isset($random)) {
// ajouter nouveau li dans <random/>
} else {
// créer nouveau <random/ > avec premier <li/>
}
//afficher tout le <template>texte1<random><li>choix1</li><li>choix2</li></random></template>
// unwrapper <template/> pour mise à jour dans BDD et avoir texte1<random><li>choix1</li><li>choix2</li></random>
Un grand merci à ceux qui peuvent m'aider et je demande l'indulgence pour la non maîtrise de PHP/XML.
mctarek
Bonjour. Je suis embourbé dans les méandres de PHP et XML dans un problème qui me tient à coeur et dont je ne parviens pas à résoudre malgré la documentation de php.net. Je ne sais même pas si je dois passer par DOMDocument ou SimpleXMLElement :!:
voici mon problème. Je récupère une chaîne dans une table SQL (utf8) qui peut être sous 2 formes :
- une simple chaîne de texte : texte1
- une chaîne xml sous la forme [xml]texte1 <random><li>choix1</li></random>[/xml]
+ Si simple chaîne, je dois obtenir cette structure [xml]<template>texte1 <random><li>choix1</li></random></template>[/xml]
+ Si <random/> existant, je dois ajouter un 2è choix soit [xml]<template>texte1 <random><li>choix1</li><li>choix2</li></random></template>[/xml]
Il faudra donc parcourir la chaîne et voir si présence de <random/>.
J'ai commencé l'exercice avec <random/> existant :
[php]
$string = <<<XML
Texte 1
<random>
<li>choix1</li>
</random>
XML;
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadXML($string);
// créer un élement <template/>
$template = $dom->createElement('template', $string);
$dom->appendChild($template);
$root = $dom->saveXML($template); // retire <xml/> tag => <template>text1<random><li>choix1</li></random></template>
echo $root;
[/php]
Ici, j'ai réussi à envelopper $string avec <template/> afin de pouvoir travailler sur tous les noeuds (texte, random et li)
Le plus dur vient après : comment detecter <random/> et ajouter un <li/>
J'ai tenté la suite suivante :
[php]
$random = $dom->getElementsByTagName('random');
if (isset($random)) {
// ajouter nouveau li dans <random/>
} else {
// créer nouveau <random/ > avec premier <li/>
}
//afficher tout le <template>texte1<random><li>choix1</li><li>choix2</li></random></template>
// unwrapper <template/> pour mise à jour dans BDD et avoir texte1<random><li>choix1</li><li>choix2</li></random>
[/php]
Un grand merci à ceux qui peuvent m'aider et je demande l'indulgence pour la non maîtrise de PHP/XML.
mctarek