Zul: DOMXML: Dokumenterstellung mit DOMImplementation

Hi Forum,

ich arbeite im Moment mit DOMXML und da ich meine XML-Dokumente mit Doctype & Namensraum versehen will, will ich mein Dokument und mein Wurzel-element mit dieser Zeile erstellen:

$config = DOMImplementation::createDocument('http://imbacms.org/config', 'config', DOMImplementation::createDocumentType('config', '-//ICG//DTD CONFIG 1.0//EN', 'dtd/config.dtd'));

Nun stellt sich hierbei folgende Frage: wie kann ich auf das jetzt erstellte CONFIG-Element zugreifen, also Attribute und Unterelemente erstellen kann, da ich ja keine Variable habe die auf das CONFIG-Element deutet.

Mfg Zul

  1. Hallo,

    $config = DOMImplementation::createDocument('http://imbacms.org/config', 'config', DOMImplementation::createDocumentType('config', '-//ICG//DTD CONFIG 1.0//EN', 'dtd/config.dtd'));

    $doctype = DOMImplementation::createDocumentType(...);
    $document = DOMImplementation::createDocument(..., $doctype);

    Mathias

    1. Hi molily,

      $config = DOMImplementation::createDocument('http://imbacms.org/config', 'config', DOMImplementation::createDocumentType('config', '-//ICG//DTD CONFIG 1.0//EN', 'dtd/config.dtd'));

      $doctype = DOMImplementation::createDocumentType(...);

      $document = DOMImplementation::createDocument(..., $doctype);

        
      Das ist doch letzendlich das gleiche, bis darauf das ich eine Variable mehr erstelle. Meine Frage hast du damit nicht beantwortet oder hab ich was wichtiges übersehen?  
        
      Mfg Zul
      
      1. Hallo,

        Sorry, hatte mich verlesen, habe jetzt auch verstanden, dass du nach der documentElement-Eigenschaft gefragt hast.

        Mathias

  2. Hi Forum,

    Da mir so offenba keiner helfen kann formuliere ich meine Frage ein bissl um: Wie erstellt man mit DOMXML ein valides XHTML-Dokument? Ich hoffe ich kann druch diese Antwort die auf meine Frage erhalten.

    Mfg Zul

    1. Hallo Zul,

      Da mir so offenba keiner helfen kann formuliere ich meine Frage ein bissl um: Wie erstellt man mit DOMXML ein valides XHTML-Dokument?

      Zum Beispiel so:

      <?php  
      define ('HTML_NS', 'http://www.w3.org/1999/xhtml');  
      $doctype = DOMImplementation::createDocumentType ('html', '-//W3C//DTD XHTML 1.0 Strict//EN', 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd');  
      $document = DOMImplementation::createDocument (HTML_NS, 'html', $doctype);  
        
      $html = $document->documentElement;  
      $head = $html->appendChild ($document->createElementNS (HTML_NS, 'head'));  
      $title = $head->appendChild ($document->createElementNS (HTML_NS, 'title'));  
      $title->appendChild ($document->createTextNode ('Hallo Welt!'));  
      $body = $html->appendChild ($document->createElementNS (HTML_NS, 'body'));  
      $h1 = $body->appendChild ($document->createElementNS (HTML_NS, 'h1'));  
      $h1->appendChild ($document->createTextNode ('Hallo Welt!'));  
      $p = $body->appendChild ($document->createElementNS (HTML_NS, 'p'));  
      $p->appendChild ($document->createTextNode ('Dies ist eine automatisch erzeugte XHTML-Datei.'));  
        
      $document->formatOutput = true;  
      echo $document->saveXML ();  
      ?>
      

      Viele Grüße,
      Christian

      1. Hi Cristian,

        Super die eigenschaft documentElement war die die ich gesucht habe! Außerdem ist formatOutput super! Also: Danke!

        Mfg Zul

        1. Hallo,

          Super die eigenschaft documentElement war die die ich gesucht habe! Außerdem ist formatOutput super! Also: Danke!

          Als kleiner Hinweis: Unter http://www.php.net/manual/en/class.domimplementation.php (und weitere Seiten) sind die ganzen Klassen samt Eigenschaften dokumentiert.

          Viele Grüße,
          Christian

          1. Hi Cristian,

            Als kleiner Hinweis: Unter http://www.php.net/manual/en/class.domimplementation.php (und weitere Seiten) sind die ganzen Klassen samt Eigenschaften dokumentiert.

            Ja, auf der Seite such ich schon seit 2 Tagen nach einer Lösung, habe allerdings mal in einem PHP-Tutorial gelesen, dass man Objekt-Eigenschaften nicht verändern oder auch nur lesen soll, deswegen hab ich da nicht gesucht.

            Mfg Zul

      2. Hellihello Christian,

        macht es nicht Sinn, die xml-Deklaration zu "omitten"? Weißt Du, wie das ohne xsl-stylesheet geht?

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
        1. Hallo!

          macht es nicht Sinn, die xml-Deklaration zu "omitten"?

          Kommt darauf an, was Du machen willst.

          Weißt Du, wie das ohne xsl-stylesheet geht?

          Mit der PHP-DOM-Erweiterung ist mir keine simple Methode bekannt.

          Aber man könnte ja einfach das Ergebnis von saveXML() filtern und die XML-Deklaration aus der Ausgabe entfernen...

          Viele Grüße,
          Christian

          1. Hellihello Christian,

            macht es nicht Sinn, die xml-Deklaration zu "omitten"?

            Kommt darauf an, was Du machen willst.

            Na eine Variante wäre ja Veröffentlichung. Gehen Browser da nicht zum Teil Quirksen, oder war das einmal?

            Weißt Du, wie das ohne xsl-stylesheet geht?

            Mit der PHP-DOM-Erweiterung ist mir keine simple Methode bekannt.

            Aber man könnte ja einfach das Ergebnis von saveXML() filtern und die XML-Deklaration aus der Ausgabe entfernen...

            Also mit str_replace(), oder substr() ?

            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
            1. Hellihello

              macht es nicht Sinn, die xml-Deklaration zu "omitten"?

              Kommt darauf an, was Du machen willst.

              Na eine Variante wäre ja Veröffentlichung. Gehen Browser da nicht zum Teil Quirksen, oder war das einmal?

              Weißt Du, wie das ohne xsl-stylesheet geht?

              Mit der PHP-DOM-Erweiterung ist mir keine simple Methode bekannt.

              saveHTML(), dabei geht aber der formatOutput() verloren und komischerweise fehlft dann gegenüber dem saveXML nicht nur die Deklaration, sondern auch der Meta-Tag.

              <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

              Die Schwierigkeit, komplette Webseiten mit DOMDocument-Funktionen zu erzeugen liegt ja wohl auch darin, Elemente mit Mischung aus Textknoten und Elementen zu erzeugen, also <a> <span> u.ä. Inline-Elemente im Text, oder?

              Dank und Gruß,

              frankx

              --
              tryin to multitain  - Globus = Planet != Welt
              1. Hallo,

                [Wann XML-Deklaration entfernen]
                Na eine Variante wäre ja Veröffentlichung. Gehen Browser da nicht zum Teil Quirksen, oder war das einmal?

                Der IE < 7 geht bei einer XML-Deklaration bei XHTML in den Quirks-Mode, ja. Aber man generiert mit der DOM-Erweiterung ja nicht nur XHTML. Und außerdem will man ja manchmal Quirks-Mode. Deswegen schrieb ich: Kommt darauf an.

                saveHTML(),

                Das serialisiert Dir das aber als HTML, d.h. leere Elemente wie <br> etc. werden nicht als <br /> geschrieben, sondern als <br>. Damit erzeugst Du valides HTML 4, aber kein valides XHTML 1.0.

                Die Schwierigkeit, komplette Webseiten mit DOMDocument-Funktionen zu erzeugen liegt ja wohl auch darin, Elemente mit Mischung aus Textknoten und Elementen zu erzeugen, also <a> <span> u.ä. Inline-Elemente im Text, oder?

                Wenn Du das als Schwierigkeit betrachten willst: Ja.

                Viele Grüße,
                Christian

                1. Hellihello

                  Die Schwierigkeit, komplette Webseiten mit DOMDocument-Funktionen zu erzeugen liegt ja wohl auch darin, Elemente mit Mischung aus Textknoten und Elementen zu erzeugen, also <a> <span> u.ä. Inline-Elemente im Text, oder?

                  Wenn Du das als Schwierigkeit betrachten willst: Ja.

                  Wie krieg ich denn umgekehrt mit Simple-XML solch einen Ausdruck ausgelesen:

                    
                          <td class="high" width="90%">  
                            SomeName (<a href="mailto:someName@example.com">someName@example.com</a>)  
                          </td>  
                  
                  

                  ? Ein var_dump der "tr" zeigt mir dann halt

                  string(31) "
                            SomName ()
                          ".

                  Oder besser mit XSLT transformieren? (Geht um den Transport eines Gästebuches von html nach xml).

                  Dank und Gruß,

                  frankx

                  --
                  tryin to multitain  - Globus = Planet != Welt