mark: HTML Tags in einer XML Datei speichern, wie?

Hallo zusammen,

in eine XML  Datei möchte ich HTML Tags speichern, wie z.B <img src=“ images/pfad_zum_bild.jpg“ />.
Leider werden die HTML Tags in der XML Datei folgenden dargestellt:

  
&lt;img src="images/pfad_zum_bild.jpg" /&gt;  

Die XML Datei wird mit SimpleXMLElement von PHP erstellt.
Die Datei sieht folgend aus, kurzer Ausschnitt:

  
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>  
<position1>  
<beitrag attribut1="2007-5">  
<titel>der Titel</titel>  
<images>&lt;img src="images/ pfad_zum_bild.jpg " /&gt; </images>  
</beitrag>  
</position1>  

Würde es sich das Problem erledigen wenn ich „DOMDocument“ verwenden würde?
Danke im Voraus.

Grüße
mark

  1. hi,

    Hallo zusammen,

    in eine XML  Datei möchte ich HTML Tags speichern, wie z.B <img src=“ images/pfad_zum_bild.jpg“ />.
    Leider werden die HTML Tags in der XML Datei folgenden dargestellt:

    &lt;img src="images/pfad_zum_bild.jpg" /&gt;

      
    so ist es auch korrekt, du musst ja kontextspezifisch maskieren. und am ende zurückverwandeln.  
      
      
    mfg  
      
    tami
    
  2. Tach!

    in eine XML  Datei möchte ich HTML Tags speichern, wie z.B <img src=“ images/pfad_zum_bild.jpg“ />.
    Leider werden die HTML Tags in der XML Datei folgenden dargestellt:
    &lt;img src="images/pfad_zum_bild.jpg" /&gt;

    Ja, wenn du das Zeug als TextNode ablegst, muss es den XML-Regeln entsprechend maskiert werden. Soweit ist das Verhalten von SimpleXML richtig.

    Würde es sich das Problem erledigen wenn ich „DOMDocument“ verwenden würde?

    Nein, auch dann müsstest du ein ordentliches Element anlegen. Und das geht auch mit SimpleXMLs addChild().

    dedlfix.

    1. hi,

      so sieht mein PHP Code in abgekürzter Version:

        
      	$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><position1></position1>');  
      	foreach ($arr as $key => $value)  
      	{  
      		if( $value != -1 )  
      		{  
      			$beitrag = $xml->addChild('beitrag');  
      			$beitrag->addAttribute('attribut1', $value['attribut1'] );			  
      			$beitrag->addChild('titel', $value['titel'] );  
      			$beitrag->addChild('images', $value['bild']  );  
      		}  
      	}  
      	#header("Content-Type: application/xml");  
      	$datename = basename( __FILE__ );  
      	$px = str_replace( $datename, "xml/xmlfile.xml", __FILE__ );  
      	$xml->asXML($px);  
      
      

      Könnt Ihr mir erläuternt was Ihr meint mit:
      <b>entsprechend maskiert werden</b>
      ?

      1. Tach!

          	$beitrag->addChild('images', $value['bild']  );  
        

        Damit fügst du einen Knoten namens images ein, dessen Inhalt ein Text ist.

        Könnt Ihr mir erläuternt was Ihr meint mit: <b>entsprechend maskiert werden</b>?

        Ja, SimpleXML beachtet für diesen "Text" den Kontextwechsel. Du möchtest aber keinen "Text" sondern Code einfügen. SimpleXML hat keinen Schalter "behandle das als Code", also musst du selbst Code draus machen, indem du die Elemente zu Fuß erzeugst. Soweit ich das sehe, geht es auch nicht, ein neues SimpleXMLElement zu erzeugen, in dessen Konstruktor du deinen Code als XML-Dokument übergeben kannst, und dieses Objekt dann dem anderen einzuhängen.

        dedlfix.

        1. hi,

          Ja, SimpleXML beachtet für diesen "Text" den Kontextwechsel. Du möchtest aber keinen "Text" sondern Code einfügen. SimpleXML hat keinen Schalter "behandle das als Code", also musst du selbst Code draus machen, indem du die Elemente zu Fuß erzeugst. Soweit ich das sehe, geht es auch nicht, ein neues SimpleXMLElement zu erzeugen, in dessen Konstruktor du deinen Code als XML-Dokument übergeben kannst, und dieses Objekt dann dem anderen einzuhängen.

          http://www.php.net/manual/de/simplexmlelement.construct.php

          bzw.

          http://www.php.net/manual/de/function.simplexml-load-string.php

          mfg

          tami

          1. Tach!

            Soweit ich das sehe, geht es auch nicht, ein neues SimpleXMLElement zu erzeugen, in dessen Konstruktor du deinen Code als XML-Dokument übergeben kannst, und dieses Objekt dann dem anderen einzuhängen.

            http://www.php.net/manual/de/simplexmlelement.construct.php
            bzw.
            http://www.php.net/manual/de/function.simplexml-load-string.php

            Diese beiden erfüllen zwar die erste Teilbedingung - dass das geht, war mir bekannt - aber nicht die zweite "und dieses Objekt dann dem anderen einzuhängen". Daran scheitert es dann - meines Wissens und meiner Kurzrecherche nach.

            Das geht mit der DOM-Extension, aber ob sich der damit einhergehende Mehraufwand lohnt, muss der OP selbst ermitteln.

            dedlfix.

  3. Mit DOMDocument könntest Du den HTML-Abschnitt in einen passenden CData-Knoten setzen, siehe DOMDocument::createCDATASection.
    Damit entfällt das ansonsten notwendige und wenig erbauliche Umwandeln der der Zeichen '<&>' in Entities.

    1. Tach!

      Mit DOMDocument könntest Du den HTML-Abschnitt in einen passenden CData-Knoten setzen, siehe DOMDocument::createCDATASection.
      Damit entfällt das ansonsten notwendige und wenig erbauliche Umwandeln der der Zeichen '<&>' in Entities.

      Ja, dann hat er aber einen CDATA-Abschnitt im Code. Das könnte ihn bei den nächsten geplanten Verarbeitungsschritte behindern.

      dedlfix.