Hosting für serverseitige Transformation
ManfredJ.
- xsl
Hallo
Ich habe eine XML Datei, die ich übers Web ausgeben will. Die Transformation soll serverseitig geschehen. Wer hat einen Tipp, wo ich die Datei hosten kann. Bei meinem derzeitigen Anbieter ist dies nicht ohne weiteres möglich.
Herzlichen Dank für Tipps.
Manfred
Hallo Manfred,
Ich habe eine XML Datei, die ich übers Web ausgeben will. Die Transformation soll serverseitig geschehen. Wer hat einen Tipp, wo ich die Datei hosten kann. Bei meinem derzeitigen Anbieter ist dies nicht ohne weiteres möglich.
Ein Webserver mit PHP 5.x und aktiviertem XSLT-Modul [siehe phpinfo()] bietet sich an.
Grüße,
Thomas
Hallo Thomas
Vielen Dank für die Antwort
Ich habe mir nun bei 1und1 WebSpace mit PHP eingerichtet. Es befindet sich dort im Verzeichnis "logs" auch eine Datei mit dem Namen info.php sowie info.php5. In beiden Dateien gibt es noch keine Einträge, außer eben "phpinfo()"
Da ich bisher noch nichts mit php zu tun hatte, muss ich nochmal nachfragen.
Wie kann ich das xml Modul aktivieren? Was muss ich in den beiden Dateien ergänzen?
Laut 1und1 Hilfe-Center muss man eine ".htaccess" Datei ins Stammverzeichnis legen, wenn andere Dateien via php5 ausgegeben werden sollen, beispielsweise:
"AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php"
(wenn alle php Shripte über php5 laufen sollen, standardmäßig läufts über php4)
Wenn ich nun eingebe
"AddType x-mapp-php5 .xml
AddHandler x-mapp-php5 .xml"
erhalte ich die Fehlermeldung 500
Ich denke, dass phpinfo() noch angepasst werden muss. Ich weiss aber nicht, wie ... Sorry, php-Nicht-Könner :-(
Herzl Dank
Hallo Manfred,
Ich habe eine XML Datei, die ich übers Web ausgeben will. Die Transformation soll serverseitig geschehen. Wer hat einen Tipp, wo ich die Datei hosten kann. Bei meinem derzeitigen Anbieter ist dies nicht ohne weiteres möglich.
Ein Webserver mit PHP 5.x und aktiviertem XSLT-Modul [siehe phpinfo()] bietet sich an.
Grüße,
Thomas
Hallo Manfred,
Wie kann ich das xml Modul aktivieren? Was muss ich in den beiden Dateien ergänzen?
Laut 1und1 Hilfe-Center muss man eine ".htaccess" Datei ins Stammverzeichnis legen, wenn andere Dateien via php5 ausgegeben werden sollen, beispielsweise: ...
Wenn der Support das so sagt, dann wird es so sein. Kenne 1und1 nicht.
Ich denke, dass phpinfo() noch angepasst werden muss. Ich weiss aber nicht, wie ... Sorry, php-Nicht-Könner :-(
phpinfo() ist eine PHP-Funktion zur Ausgabe der aktuellen Konfiguration mit Systemvariablen, installierten Modulen etc.
Schreibe eine Testdatei, etwa test.php, mit dem Inhalt:
<?php
phpinfo();
?>
und lade sie hoch führe den Code auf dem Server aus.
Hinweise zu XSLT mit PHP gibt das Handbuch.
Grüße,
Thomas
Hallo Manfred,
Wie kann ich das xml Modul aktivieren? Was muss ich in den beiden Dateien ergänzen?
Herzlichen Dank für die immer so schnellen Antworten, Thomas !
Nach phpinfo (5.2.17) sind XML, XMLwriter, XMLreader, XSL, EXSTL actice bzw. enabled. Die Voraussetzungen sind also da, denke ich.
Ich habe mich jetzt an den Support gewandt, wenn sie weiterhelfen können, melde ich mich nochmal
Merci
Laut 1und1 Hilfe-Center muss man eine ".htaccess" Datei ins Stammverzeichnis legen, wenn andere Dateien via php5 ausgegeben werden sollen, beispielsweise: ...
Wenn der Support das so sagt, dann wird es so sein. Kenne 1und1 nicht.
Ich denke, dass phpinfo() noch angepasst werden muss. Ich weiss aber nicht, wie ... Sorry, php-Nicht-Könner :-(
phpinfo() ist eine PHP-Funktion zur Ausgabe der aktuellen Konfiguration mit Systemvariablen, installierten Modulen etc.
Schreibe eine Testdatei, etwa test.php, mit dem Inhalt:
<?php
phpinfo();
?>
>
> und lade sie hoch führe den Code auf dem Server aus.
>
> Hinweise zu [XSLT mit PHP](http://de2.php.net/manual/de/book.xslt.php) gibt das Handbuch.
>
> Grüße,
> Thomas
Hallo Manfred,
Nach phpinfo (5.2.17) sind XML, XMLwriter, XMLreader, XSL, EXSTL actice bzw. enabled. Die Voraussetzungen sind also da, denke ich.
Dann kann es doch direkt losgehen, hier ein kompaktes Beispiel:
test.xml:
<?xml version="1.0" encoding="UTF-8"?>
<test abc="123">Hallo Welt!</test>
test.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
xmlns="http://www.w3.org/1999/xhtml"/>
<xsl:template match="/">
<html lang="de" xml:lang="de">
<head>
<title>Test</title>
</head>
<body>
<h1><xsl:value-of select="test"/></h1>
<p><xsl:value-of select="test/@abc"/></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
test.php:
<?php
$xmldocument=file_get_contents("test.xml");
$xsldocument=file_get_contents("test.xsl");
// Transformation:
if($xmldocument && $xsldocument)
{
$xmlobj=new DomDocument();
$xmlobj->loadxml($xmldocument);
$xslobj=new DomDocument();
$xslobj->loadxml($xsldocument);
$xsltref=new XSLTProcessor;
$xsltref->importStylesheet($xslobj);
$xsl_output=$xsltref->transformToXML($xmlobj);
echo $xsl_output;
}
?>
Ergebnis (HTML):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test</title>
</head>
<body>
<h1>Hallo Welt!</h1>
<p>123</p>
</body>
</html>
Grüße,
Thomas
Herzlichen Dank Thomas
Eine Frage hätte ich doch noch.
Wie lässt sich das XML-Dokument an dieser Stelle filtern?
$xmldocument=file_get_contents("test.xml");
test.php:
<?php
$xmldocument=file_get_contents("test.xml");
$xsldocument=file_get_contents("test.xsl");// Transformation:
if($xmldocument && $xsldocument)
{
$xmlobj=new DomDocument();
$xmlobj->loadxml($xmldocument);
$xslobj=new DomDocument();
$xslobj->loadxml($xsldocument);$xsltref=new XSLTProcessor;
$xsltref->importStylesheet($xslobj);
$xsl_output=$xsltref->transformToXML($xmlobj);echo $xsl_output;
}?>
>
>
> Ergebnis (HTML):
>
> ~~~html
<?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> <title>Test</title>
> </head>
> <body>
> <h1>Hallo Welt!</h1>
> <p>123</p>
> </body>
> </html>
Grüße,
Thomas
Hallo Manfred,
Eine Frage hätte ich doch noch.
Wie lässt sich das XML-Dokument an dieser Stelle filtern?$xmldocument=file_get_contents("test.xml");
Was meint filtern? Es wird hier eine XML-Ressource übergeben / eingelesen. Dieser Name könnte also auch in einer Variable liegen, falls das gemeint ist.
Grüße,
Thomas
Bei der XML-Ressource handelt es sich um eine externe Bibliographie. Wenn nur Bücher zu einem speziellen Schlagwort eingelesen werden sollen, erreiche ich dies via XSLT so:
select="document('bibliographie.xml')/Buecher/Buch[@Schlagwort = 'abc']"
Ich nehme an, dass ich auch auf diese Weise via PHP filtern kann
$xmldocument=file_get_contents("test.xml/ .... ")
Hallo Manfred,
Eine Frage hätte ich doch noch.
Wie lässt sich das XML-Dokument an dieser Stelle filtern?$xmldocument=file_get_contents("test.xml");
Was meint filtern? Es wird hier eine XML-Ressource übergeben / eingelesen. Dieser Name könnte also auch in einer Variable liegen, falls das gemeint ist.
Grüße,
Thomas
Hallo Manfred,
Bei der XML-Ressource handelt es sich um eine externe Bibliographie. Wenn nur Bücher zu einem speziellen Schlagwort eingelesen werden sollen, erreiche ich dies via XSLT so:
select="document('bibliographie.xml')/Buecher/Buch[@Schlagwort = 'abc']"
Ich nehme an, dass ich auch auf diese Weise via PHP filtern kann
$xmldocument=file_get_contents("test.xml/ .... ")
Ob select="document(file_get_contents('bibliographie.xml')/Buecher/Buch[@Schlagwort = 'abc']" funktioniert, wäre auszuprobieren.
Zur Verarbeitung der über file_get_contents() eingelesenen Ressource lässt sich im XSLT-Stylesheet ein passendes Template anwenden:
<xsl:template match="/Buecher/Buch[@Schlagwort = 'abc']">...</xsl:template>
Grüße,
Thomas
Moin ThomasM,
Dein Beispiel funktioniert gut. Leider aber nicht mit meinem ziemlich komplexen XML/XSLT, das ich offline prima mit Saxon zum Laufen kriege. Online gibt Dein Beispiel dann nur folgende Warnungen aus:
Warning: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: Invalid expression in /mnt/web9/61/39/52402539/htdocs/movingfencer/xsltest.php on line 15
Warning: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: compilation error: file /mnt/web9/61/39/52402539/htdocs/movingfencer/ line 147 element value-of in /mnt/web9/61/39/52402539/htdocs/movingfencer/xsltest.php on line 15
Warning: XSLTProcessor::importStylesheet() [xsltprocessor.importstylesheet]: xsl:value-of : could not compile select expression '//document('stammdaten.xml')//project[1]/@coverage' in /mnt/web9/61/39/52402539/htdocs/movingfencer/xsltest.php on line 15
Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: No stylesheet associated to this object in /mnt/web9/61/39/52402539/htdocs/movingfencer/xsltest.php on line 16
Mit PHP kenne ich mich leider so gut wie gar nicht aus, aber es scheint daran zu liegen, dass der Parser auf dem Apache-Server (strato) bestimmte Dinge einfach nicht kann (XSLT 2.0?, "document('HilfsDB.xml')//..." usw.?)
Wer weiss Abhilfe? Saxon braucht Java, und das ist offenbar nicht installiert.
Der Hintergrund ist der, dass ich Webseiten bislang lokal mit XML/XSL (Datum prüfen für aktualisierte Terminlisten, Einbeziehung von RSS-Feeds usw.) generiere und meinen Server dazu bringen möchte, das per Cron-Job selbst zu erledigen
Danke im Voraus!
---
"they got the guns - we got the number" - James Douglas Morrison
Hallo HaThoV,
Dein Beispiel funktioniert gut. Leider aber nicht mit meinem ziemlich komplexen XML/XSLT, das ich offline prima mit Saxon zum Laufen kriege. Online gibt Dein Beispiel dann nur folgende Warnungen aus: ...
PHP unterstützt XSLT / XPath 1.0. Bin damit bisher hingekommen, wobei 2.0 natürlich sehr attraktiv wäre. Alternativ kann man auch PHP-Funktionen innerhalb eines XSLT-Stylesheets ausführen.
Grüße,
Thomas
Hallo ThomasM,
PHP unterstützt XSLT / XPath 1.0. Bin damit bisher hingekommen, wobei 2.0 natürlich sehr attraktiv wäre. Alternativ kann man auch PHP-Funktionen innerhalb eines XSLT-Stylesheets ausführen.
Schön. Dann bräuchte ich aber zwei unterschieliche Stylesheets, und das ist doch wohl nicht Sinn der Sache.
Grüße,
Thomas
Ebenso.
mfg
T.
Hallo Manfred,
Wie kann ich das xml Modul aktivieren? Was muss ich in den beiden Dateien ergänzen?
Laut 1und1 Hilfe-Center muss man eine ".htaccess" Datei ins Stammverzeichnis legen, wenn andere Dateien via php5 ausgegeben werden sollen, beispielsweise: ...
Wenn der Support das so sagt, dann wird es so sein. Kenne 1und1 nicht.
Ich denke, dass phpinfo() noch angepasst werden muss. Ich weiss aber nicht, wie ... Sorry, php-Nicht-Könner :-(
phpinfo() ist eine PHP-Funktion zur Ausgabe der aktuellen Konfiguration mit Systemvariablen, installierten Modulen etc.
Schreibe eine Testdatei, etwa test.php, mit dem Inhalt:
<?php
phpinfo();
?>
und lade sie hoch führe den Code auf dem Server aus.
Hinweise zu XSLT mit PHP gibt das Handbuch.
Grüße,
Thomas