potresti provare a non usare i CDATA, in questo caso devi precisargli una grammatica (probabilmente non devi ridefinire tutti i tag di xhtml ma almeno gli amp, altrimenti avrai un errore)
io normalmente tuttavia racchiudo tutto in CDATA per levarmi ogni problema, e mi funziona.Codice PHP:header("Content-type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
// echo "<!DOCTYPE data SYSTEM \"xxx.dtd\"";
// oppure in linea
echo "\n<!DOCTYPE data [";
echo "\n <!ELEMENT data ( ...)>";
....
echo "\n <!ATTLIST ..... CDATA #IMPLIED>";
echo "\n <!ENTITY egrave \"&egrave;\">";
echo "\n <!ENTITY eacuta \"&eacuta;\">";
echo "\n <!ENTITY agrave \"&agrave;\">";
echo "\n <!ENTITY igrave \"&igrave;\">";
echo "\n <!ENTITY ugrave \"&ugrave;\">";
echo "\n <!ENTITY ograve \"&ograve;\">";
echo "\n <!ENTITY euro \"&euro;\">";
echo "\n <!ENTITY reg \"&reg;\">";
echo "\n]>";
in questo caso lato server sarà (sempre in php)
lato client lo leggo cosìCodice PHP:echo "<data >";
echo " <![CDATA[";
// il tuo codice xhtml
echo " ]]>";
echo "</data>";
la funzione printXML è una lettora ricorsiva del tuo html (che deve quindi essere valido)codice:var obj_corpo = xml.getElementsByTagName("data"); if (obj_corpo.length > 0) { .... var childs = obj_corpo[0].childNodes; var str = ""; for (var i = 0; i < childs.length; i++) str += printXML (childs[i], 1); (il tuo div di inserimento).innerHTML = str; ..... }
spero che ti possa essere utilecodice:// stampa l'xml ricorsivamente // curEl = il noto attuale // depth = profondità, alla prima chiamata è 1 function printXML (curEl, depth) { var loc_print=""; var tab = ""; if (curEl) { var tagName = curEl.tagName; if (tagName) { tag = tab + "<" + curEl.tagName ; var attr = curEl.attributes; for (var i = 0; i < attr.length; i++) { var nome = attr[i].nodeName; var valore = curEl.getAttribute(nome); tag += " " + nome + "=\"" + valore + "\""; } tag += ">"; } else tag = tab + curEl.nodeValue; loc_print += tag; var curElChild = curEl.childNodes; for (var i = 0; i < curElChild.length; i++) { // attraversamento ricorsivo dei figli loc_print += printXML(curElChild[i], depth+1); } } // chiude il tag if (tagName) { loc_print += tab + "</" + tagName + ">"; } return loc_print; }
ciao
sergio

Rispondi quotando