2010-11-18 11 views
2

Ich reiße mir die Haare aus und versuche zum ersten Mal mit "einfachem" XML zu arbeiten. Ich erstelle ein kleines CMS für eine Flash-basierte Website und der Inhalt wird in einer XML-Datei gespeichert. Mein Problem ist, dass viele der Kopie Felder XML CDATA Felder sind. auf der einen Seite mit:SimpleXML-, CDATA- und HTML-Entities

$xml = simplexml_load_file($file, 'SimpleXMLElement', LIBXML_NOCDATA); 

Ich kann die Daten aus diesem Knoten ziehen und die CDATA-Tags sind abgestreift. Meine Fragen sind mit dem Versuch, die Daten zu speichern, mit:

file_put_contents($file, $xml->asXML()); 

Probleme sind:

a) Tags werden mit ihrem HTML-Entity-Äquivalente interpretiert. Ich möchte nicht, dass das passiert. Ich nehme an, das kommt von der asXML-Methode, denn selbst wenn ich einen html_entity_decode für die $ _POST-Daten mache, wird er immer noch konvertiert.

b) aufgrund des oben genannten gibt es keine Möglichkeit, die CDATA-Tags hinzuzufügen, weil sie auch ihre Zeichen konvertiert haben.

SimpleXML war bisher alles andere als einfach für mich. Ist jemals jemand darauf gestoßen?

+2

IMO, es ist ein weit verbreitetes Missverständnis, dass das * einfache * in SimpleXml * einfach zu verwenden * bedeutet. Es bedeutet eher, dass Sie für einfache XML-Anwendungen verwenden sollten. Und für alles andere, verwenden Sie eine geeignete API, wie DOM. – Gordon

+0

Danke Gordon! Da ich mich nur mit Datenbanken mit meinen Daten beschäftigen musste, war mir die DOM-Klasse gar nicht bewusst. Das sieht viel mehr danach aus, was ich brauche. CDATA funktioniert! Super, danke für die schnelle und einfache Antwort. Übrigens, die einfache Sache war ein wirklich schlechter Witz. –

Antwort

1

Eigentlich schien genau das zu sein, was ich tun musste:

How to keep DOMDocument from saving < as &lt

Obwohl für den DOM api über die manuelle Gießen hat mir etwas Neues Ich mag würde für die zukünftige Verwendung lernen.

0

Ich habe SimpleXML noch nicht verwendet, aber wenn Ihr Problem darin besteht, dass Ihre Daten als XML-Codierung gespeichert werden, kann Flash XMLEncoded-Daten nativ in XML-Objekte konvertieren. Sie können in Ihren Daten laden und es nur auf ein neues XML-Objekt übergeben, wie so:

var ldr:URLLoader = new URLLoader(new URLRequest('./test.xml')); ldr.addEventListener(Event.COMPLETE, handleLoaded);

function handleLoaded(e:Event) : void { var xml:XML = new XML(e.target.data); }

und Sie werden ein native Flash-XML-Objekt haben.

Wenn Sie AS2 verwenden, dann müssen Sie die LoadVars-Objekt verwenden, um die Daten zu laden, aber Sie werden die onData (nicht onLoad) Ereignis verwenden, müssen Sie Ihre XML-codierte Zeichenfolge zu greifen und es in das XML-Objekt übergeben .

nicht sicher, ob dies Ihr Problem löst, aber es könnte hilfreich sein.