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