ManfredJ.: Hosting für serverseitige Transformation

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

  1. 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

    1. 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

      1. 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

        1. 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
          
          1. 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

            1. Herzlichen Dank Thomas

            2. 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

              1. 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

                1. 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

                  1. 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

            3. 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

              1. 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

                1. 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.

                  --
                  "they got the guns - we got the number" - James Douglas Morrison
      2. 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