Come da topic ho il solito problema con XML e PHP, ma guardando in giro non ho mai trovato una soluzione chiara!
Ora mi spiego:
vorrei scrivere e leggere da un file xml dove ci sono dei campi che sono codice html, la soluzione per scrivere sarebbe fargli scrivere una stringa come questa nel tag che mi interessa <![CDATA[ io sono il testo e anche l'html e qualche altra cosa &%<> ]]>
fin qui tutto ok, il problema sta nel fatto che ovviamente quando utilizzo questo
Codice PHP:
$stringa = "<![CDATA[ io sono il testo e anche [b]l'html[/b] e qualche altra cosa &%<> ]]>";
$xml = simplexml_load_file($file);
$news = $xml->addChild('articolo', $stringa);
file_put_contents($file, $xml->asXML());
la $stringa viene parsata e crea errori o viene inserito male, come ovviare a questo problema?
ho provato a cercare su internet, trovando estensioni alla classe come questa
Codice PHP:
class SimpleXMLExtended extends SimpleXMLElement {
public function addCData($cdata_text) {
$node= dom_import_simplexml($this);
$no = $node->ownerDocument;
$node->appendChild($no->createCDATASection($cdata_text));
}
}
// come utilizzarlo
$xml = new SimpleXMLExtended('<?xml version = "1.0" encoding = "UTF-8"?><root></root>');
$mynode = $xml->addChild("myname");
$mynode->addCData("my name contains everything I want &%<>");
echo $xml->asXml();
io utilizzerei anche la classe qui sopra, ma ho problemi ad integrarla.
una funzioncina tipo questa?
Codice PHP:
function InserisciCData($strxml, $child, $stringa) {
$xml = new SimpleXMLExtended($strxml);
$mynode = $xml->addChild($child);
$mynode->addCData($stringa);
return $xml->asXml(); // Ritorna la stringa giusta
}
$stringa = "<![CDATA[ io sono il testo e anche [b]l'html[/b] e qualche altra cosa &%<> ]]>";
$xml = simplexml_load_file($file);
$xmlToAdd= InserisciCData($xml->asXML(), 'articolo', $stringa); // qui dovrei ricollegare quello che ho fatto con l'xml precedente
// A questo punto come faccio ad aggiungere l'xml che mi serve a quello precedente?
file_put_contents($file, $xml->asXML());