DOMXML: Dokumenterstellung mit DOMImplementation
Zul
- php
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
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
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
Hallo,
Sorry, hatte mich verlesen, habe jetzt auch verstanden, dass du nach der documentElement-Eigenschaft gefragt hast.
Mathias
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
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
Hi Cristian,
Super die eigenschaft documentElement war die die ich gesucht habe! Außerdem ist formatOutput super! Also: Danke!
Mfg Zul
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
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
Hellihello Christian,
macht es nicht Sinn, die xml-Deklaration zu "omitten"? Weißt Du, wie das ohne xsl-stylesheet geht?
Dank und Gruß,
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
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ß,
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ß,
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
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ß,