So verhindern Sie, dass DOMDocument als & lt gespeichert wird

8

Ich verwende simpleXML, um einen untergeordneten Knoten in eines meiner XML-Dokumente einzufügen ... Wenn ich eine print_r für mein simpleXML-Objekt mache, wird < immer noch als < in der Ansichtsquelle angezeigt . Nachdem ich dieses Objekt jedoch mit DOMDocument in XML gespeichert habe, wird < in &lt; und > in &gt;

konvertiert

Irgendwelche Ideen, wie Sie dieses Verhalten ändern können? Ich habe versucht, dom->substituteEntities = false; hinzuzufügen, aber das hat nicht geholfen.

%Vor%

Hier verwende ich das & lt;:

%Vor%

Das Problem ist, dass ich einfaches XML verwende, um bestimmte Knoten im XML-Dokument zu durchlaufen. Wenn ein Attribut mit einer bestimmten ID übereinstimmt, wird ein bestimmter untergeordneter Knoten mit CDATA hinzugefügt. Nach der gesamten Verarbeitung speichere ich den XML-Code mit DOMDocument in die Datei zurück. Dort befindet sich der & lt; wird in & amp; lt usw. umgewandelt.

Hier ist ein Link zu meiner gesamten Klassendatei, damit Sie eine bessere Vorstellung davon bekommen können, was ich erreichen möchte. Sehen Sie sich speziell die Methode hint_insert () unten an.

Ссылка

    
ThinkingInBits 06.08.2010, 13:16
quelle

2 Antworten

10

SimpleXML und php5s DOM-Modul verwenden Sie die gleiche interne Darstellung des Dokuments (erleichtert durch libxml ). Sie können zwischen beiden APIs wechseln, ohne das Dokument über simplexml_import_dom () und dom_import_simplexml () erneut zu analysieren .
I.e. Wenn Sie die Iteration mit der SimpleXML-API wirklich durchführen wollen / müssen, nachdem Sie Ihr Element gefunden haben, können Sie zur DOM-API wechseln und erstellen den CData-Abschnitt innerhalb des gleichen Dokuments.

%Vor%

druckt

%Vor%     
VolkerK 06.08.2010, 13:33
quelle
3

Das Problem besteht darin, dass Sie das wahrscheinlich als Zeichenfolge hinzufügen und nicht als Element.

Also statt:

%Vor%

wird als Text behandelt:

%Vor%

Sie können kein literales < im Body des XML-Dokuments haben, es sei denn, es ist das Öffnen eines Tags.

Bearbeiten: Nach dem, was Sie in den Kommentaren beschreiben, denke ich, dass Sie hinterher sind:

DomDocument::createCDatatSection()

%Vor%

Edit2: Nachdem ich deine Bearbeitung gelesen habe, kann ich nur eins sagen:

You're doing it wrong... Sie können keine Elemente als Zeichenfolgenwert für ein anderes Element hinzufügen. Entschuldigung, du kannst einfach nicht. Aus diesem Grund entgeht es den Dingen, weil DOM und SimpleXML dafür sorgen, dass Sie immer gültiges XML erstellen. Sie müssen das Element als Objekt erstellen ... Wenn Sie also das CDATA-Kind erstellen möchten, müssen Sie Folgendes tun:

%Vor%

Das ist alles, was es sollte ...

    
ircmaxell 06.08.2010 13:23
quelle

Tags und Links