Bene: PHP DOM: nodeValue von Element HTML zuweisen

Hallo,

ich möchte bestimmten Inhalten eines XML-Dokumentes zusätzliche HTML-Tags zuweisen. Dabei habe ich aber das Problem, dass die Kleiner und Größer-Zeichen der Tags kodiert werden. Ein mit <strong></strong> eingefasster Text wird nicht hervorgehoben, sondern die Tags stehen im Ergebnis sichtbar daneben.

Nachfolgend ein vereinfachtes Beispiel:

  
$xml = "<outer><inner>abc</inner></outer>";  
  
$doc = new DOMDocument('1.0', 'UTF-8');  
$doc->loadXML($xml);  
  
  
$item = $doc->getElementsByTagName("inner")->item(0);  
$item->nodeValue = "<strong>abc</strong>";  
  
  
echo $item->nodeValue;  
echo "<br />";  
echo htmlspecialchars($doc->saveXML($doc));  

Das Ergebnis:
abc<?xml version="1.0" encoding="UTF-8"?> <outer><inner>&lt;strong&gt;abc&lt;/strong&gt;</inner></outer>

Könnt ihr mir sagen, wie ich dafür sorgen kann, dass die Kleiner und Größer-Zeichen des Strong-Tags nicht kodiert werden?

Danke und viele Grüße
Bene

  1. Hallo,

    jetzt hatte ich vergessen, erneut das Vorschau-Häckchen zu setzen.

    Folgende Zusatz-Infos:

    • Der String abc wird im Ergebnis fett angezeigt.
    • Der String abc und die Ausgabe von htmlspecialchars werden auf Grund des <br /> in zwei Zeilen angeordnet.

    Grüße
    Bene

  2. Hi,

    Könnt ihr mir sagen, wie ich dafür sorgen kann, dass die Kleiner und Größer-Zeichen des Strong-Tags nicht kodiert werden?

    In dem du ein neues Element strong erzeugst und einhaengst.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hi,

      vielen Dank für die Antwort. Klarer Denkfehler von mir. Natürlich werden durch das Anhängen der Tags keine Elemente im DOM-Baum erzeugt.

      Jetzt stehe ich vor einem neuen Problem:
      Mein Beispiel war etwas vereinfacht. In meinem Fall wird das HTML, dass ich dem nodeValue zuweisen möchte erst generiert (durch Textile), d.h. es kann auch verschachtelte Tags geben. Das heißt ich müsste von dem Ergebnis der Generierung einen neuen DOM-Baum erzeugen und diesen dem Node zuweisen.

      Gibt es für diesen Fall eine passende Funktion, ich habe leider keine finden können.

      Grüße
      Bene

      1. Hi,

        Mein Beispiel war etwas vereinfacht. In meinem Fall wird das HTML, dass ich dem nodeValue zuweisen möchte erst generiert (durch Textile), d.h. es kann auch verschachtelte Tags geben.

        Erzeugt Textile gueltiges XHTML?
        Wenn ja -

        Das heißt ich müsste von dem Ergebnis der Generierung einen neuen DOM-Baum erzeugen und diesen dem Node zuweisen.

        Gibt es für diesen Fall eine passende Funktion, ich habe leider keine finden können.

        • dann hast du eine Funktion dafuer bereits in deinem Code stehen.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Hallo,

          Erzeugt Textile gueltiges XHTML?

          Ja.

          • dann hast du eine Funktion dafuer bereits in deinem Code stehen.

          Hilf mir mal bitte auf die Sprünge.
          Meinst du loadXML? Damit kann ich ja das, was mir Textile liefert wieder in einen DOM-Baum umwandeln, aber wie kann ich diesen Baum wieder beim Node einhängen? Ich kann einem DOMNode ja kein DOMDocument zuweisen und loadXML gibt es ja nur für DOMDocument.

          Grüße
          Bene

          1. Hi,

            Meinst du loadXML? Damit kann ich ja das, was mir Textile liefert wieder in einen DOM-Baum umwandeln, aber wie kann ich diesen Baum wieder beim Node einhängen? Ich kann einem DOMNode ja kein DOMDocument zuweisen

            Nein, aber du kannst die Kindelemente eines Documents importieren und einfuegen.

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
            1. Hi,

              Nein, aber du kannst die Kindelemente eines Documents importieren und einfuegen.

              Jetzt hab ich es hingekriegt: Nach dem Import der Elemente (http://de.php.net/manual/de/domdocument.importnode.php) konnte ich diese mit appendChild hinzufügen.
              Ganz hilfreich fand ich folgenden Artikel: http://www.exponetic.com/blog/blog/2005/05/

              ChrisB, vielen Dank für deine Hilfe!

              Grüße
              Bene