XHTML über XML und XSLTProzessor erstellen
Stefan
- php
Liebe Leute,
ich möchte XML-Daten, die ich aus unterschiedlichen Quellen generiere, über XSLT in valides XHTML "überführen".
(diese XHTML-Dateien werden statisch gesichert, d.h. es muß wirklich valides XHTML dabei rauskommen)
Dazu nutze ich die DOM API und die XSL-Functions in PHP5, die beide ziemlich dürftig dokumentiert sind.
Problem: Ich habe keine _einfache_ Möglichkeit gefunden, mir eine XHTML Datei inclusive Doctype über den XSLTProcessor generieren zu lassen, da die Angabe eines Doctype sowohl im XML-Document als auch im XSL-Stylesheet zu einem Fehler führt. Das kann ich auch nachvollziehen, blöd ist es trotzdem.
Das nachträgliche Setzen eines Doctype ist über PHP anscheinend nicht möglich, da die Eigenschaft nur lesbar ist und keine Set-Funktion existiert
Ich habe nun den Weg gewählt, nach dem Parsen der XML-Daten durch das Stylesheet den generierten DOM-Baum in ein neues DOMDocument zu importieren, welches ich vorher so erstelle:
$domImpl = DOMImplementation::createDocumentType('html', '-//W3C//DTD XHTML 1.0 Strict//EN', 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd');
$xhtmlDoc = DOMImplementation::createDocument(null, 'html', $domImpl);
Der Aufruf von $xhtml->saveXML() liefert mir dann tatsächlich den gewünschten Doctype zurück.
Das funktioniert zwar, erscheint mir aber sowas von umständlich, daß ich mich frage, ob dies denn wirklich der Weisheit letzter Schluß ist.
Auch das nachträgliche Manipulieren des generierten Source über String-Funktionen ist mir in den Sinn gekommen, aber "schön ist watt anderes..."
Wenn da jemand von Euch andere Lösungen kennt, beziehungsweise gute Resourcen zu diesem Thema parat hat (ob nun in PHP oder anderen Sprachen, die APIs sind ja weitgehend ähnlich), würde ich mich sehr freuen.
Frohes Neues,
Stefan
Hi,
Problem: Ich habe keine _einfache_ Möglichkeit gefunden, mir eine XHTML Datei inclusive Doctype über den XSLTProcessor generieren zu lassen, da die Angabe eines Doctype sowohl im XML-Document als auch im XSL-Stylesheet zu einem Fehler führt.
ganz anders als bei den entsprechenden Attributen des xsl:output-Elements. Oder reagiert PHP bzw. der XSLT-Prozessor darauf nicht?
Cheatah
Hi Cheatah,
auch wenn das schwierig werden könnte: ich will ein Kind von Dir! :))
ganz anders als bei den entsprechenden Attributen des xsl:output-Elements. Oder reagiert PHP bzw. der XSLT-Prozessor darauf nicht?
Doch, er reagiert! Vielen Dank!
Gruß,
Stefan