par
sadeq » 10 sept. 2008, 23:43
Car avant d'utiliser DOM, il faut que la source XML soit correcte, et selon ce que tu as cité comme problématique, franchement ton XML n'est pas valide vu du standard car il ne respecte pas le format.
Je m'explique : selon XML, une balise <truc> ne peut contenir que du texte ou d'autres balises correctement imbriquées ouvertes et fermées et la balise de départ doit se terminer par </truc>
Autrement dit, il ne doit pas y avoir de < ou > disposés n'importe comment au sein d'un élément <truc></truc>
Et ça ne m'étonne pas que DOM n'accepte pas le format de ton XML.
Donc, il faut d'abord corriger le format XML avant de le soumettre à DOM. Et pour ça je t'ai suggéré d'écrire un correcteur avec preg_replace().
Voici un exemple :
<?php
//XML source
$xml = "<attention>blabla < blabla < blabla > blabla</attention>";
//Décomposition en parties ciblées
preg_match('#(<attention>)(.*)(</attention>)#', $xml, $parties_trouvées); //3 parties reherchées entourées par ()
//Traitement de la partie à modifier : dans notre cas la partie n°2
$partie_remplacée = preg_replace(array('#<#', '#>#'), array('<', '>'), $parties_trouvées[2]);
//Recomposition de la chaine XML
$xml = $parties_trouvées[1] . $partie_remplacée . $parties_trouvées[3];
//Afficher le résultat
echo $xml;
?>
Car avant d'utiliser DOM, il faut que la source XML soit correcte, et selon ce que tu as cité comme problématique, franchement ton XML n'est pas valide vu du standard car il ne respecte pas le format.
Je m'explique : selon XML, une balise <truc> ne peut contenir que du texte ou d'autres balises correctement imbriquées ouvertes et fermées et la balise de départ doit se terminer par </truc>
Autrement dit, il ne doit pas y avoir de < ou > disposés n'importe comment au sein d'un élément <truc></truc>
Et ça ne m'étonne pas que DOM n'accepte pas le format de ton XML.
Donc, il faut d'abord corriger le format XML avant de le soumettre à DOM. Et pour ça je t'ai suggéré d'écrire un correcteur avec preg_replace().
Voici un exemple :
[php]<?php
//XML source
$xml = "<attention>blabla < blabla < blabla > blabla</attention>";
//Décomposition en parties ciblées
preg_match('#(<attention>)(.*)(</attention>)#', $xml, $parties_trouvées); //3 parties reherchées entourées par ()
//Traitement de la partie à modifier : dans notre cas la partie n°2
$partie_remplacée = preg_replace(array('#<#', '#>#'), array('<', '>'), $parties_trouvées[2]);
//Recomposition de la chaine XML
$xml = $parties_trouvées[1] . $partie_remplacée . $parties_trouvées[3];
//Afficher le résultat
echo $xml;
?>[/php]