Anzeige:
Ergebnis 1 bis 10 von 10

Thema: XML XSLT und php

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.05.2004
    Beiträge
    212

    XML XSLT und php

    hi leute, ich hab ein problem mit dem o.g. ich lasse mittels php ein xml erstellen und nutzer dazu dann ja logischerweise
    Code:
    header("Content-Type: application/xhtml+xml;charset=UTF-8");
    dann hab ich noch ein xsl file, welches auch mit hilfe von php erstellt wird
    und nun versuche ich noch beide dokumente zusammen zuführen, wenn ich das mit
    Code:
    <?xml-stylesheet type="text/xsl" href="./sample.php"?>'
    im xml file angebe funktioniert auch so wie ich mir das vorstelle.
    nun wollte ich das ganze aber ohne die o.g. angaben versuchen und dafür das ganze mit php-xslt verbinden, dann fehlt aber der ganze inhalt, der mit php erstellt wurden ist
    das dritte file sieht so aus:
    Code:
    <?php
    $xp = new XsltProcessor;
    
    $xsl = new DOMDocument;
    $xsl->load('sample.php');
    $xp->importStylesheet($xsl);
    
    $xml = new DOMDocument;
    $xml->load('kalender.php');
    
    $output = $xp->transformToXML($xml) or die('Transformation error!');
     
    echo $output;
    ?>
    cu SHB

  2. #2
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    wenn du load("sample.php") machst wird auch nicht die ausgabe von
    dem php programm geladen sondern das php programm.

    du müsstest also sample.php aufrufen, die ausgabe in einer temp. datei speichern und diese dann laden.

  3. #3
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Du kannst file_get_contents() mit einer »URL« verwenden.
    Dann geht das
    z.B:
    Code:
    $xml = file_get_contents( "http://localhost/sample.php" );
    ...
    Wobei deine Arbeitsweise unlogisch ist!!
    Warum verwendest du nicht include und ziehst deine xml über eine Funktion mit $dom->importNode rein und hängst dann deine XML an den XSLT Prozessor an.
    Das Beispiel lädt eine XML und hängt eine weitere XML an.
    PHP-Code:
    /**
    * Suche Template und gebe den XML Dokumenten Inhalt zurueck.
    * @section Base
    * @short Open XML Template from content/?.xml Into str Stream.
    * @param[in] \b $tpl Templatename without Extension. (STRING)
    * @return VOID
    */
    function importTemplate$tplDomDocument $domDomElement $append )
    {
       
    $file HJCMS_BASEDIR "/content/" $tpl ".xml";
       if ( 
    is_readable$file ) )
       {
          
    $xml = new DomDocument('1.0','utf8');
          
    $xml->formatOutput true;
          
    $xml->load$file );
          
    $template $xml->getElementsByTagName('div')->item(0);
          if (!
    $template)
             return;

          
    $tpl $dom->importNode$templatetrue );
          
    $append->appendChild$tpl );
       }

    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  4. #4
    Registrierter Benutzer
    Registriert seit
    05.05.2004
    Beiträge
    212
    da ich mich erst seit kurzen mit xml xslt befasse verstehe ich nicht warum das unlogisch ist, kannst du mich aufklären

    danke

    cu SHB

  5. #5
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Weil du mit einer Funktion wesentlich Performanter arbeitest.
    In deiner Variante machst du für eine Abfrage zwei HTTP anfragen an den Apache. Das macht pro Anfrage ca. 5 Sub Prozesse (Kindprozesse) je nach Einstellung im Apache aus ohne die Modul Prozesse an PHP mit gerechnet.
    Wenn ich dein Admin währe hättest du ganz schnell ein E-Mail mit der Androhung deinen Account vorerst zu sperren
    http://httpd.apache.org/docs/2.0/mod/prefork.html
    Geändert von undefined (18-02-2010 um 20:50 Uhr)
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  6. #6
    Registrierter Benutzer
    Registriert seit
    05.05.2004
    Beiträge
    212
    ok, nun hab ich das xml dokument komplett mit dom document erstellen lassen und wenn ich das file aufrufe stellt er es mir auch genauso dar wie ich es mir vorstelle, wenn ich das file nun mit include hereinziehe wird einfach eine
    Code:
    1
    an das dokument angehangen
    das ist das file um den xml code zu erzeugen
    Code:
    <?php
    header("Content-Type: text/xml;charset=UTF-8");
    $xml = new DOMDocument("1.0","UTF-8");
    $xml->formatOutput = true;
    
    $kalender = $xml->createElement("kalender");
    $xml->appendChild($kalender);
    
    $monat = $xml->createElement("monat");
    $kalender->appendChild($monat);
    
    $person = $xml->createElement("person");
    $monat->appendChild($person);
    
    $name = $xml->createElement("name","Wolf");
    $person->appendChild($name);
    
    
    $termin = $xml->createElement("termin");
    $person->appendChild($termin);
    
    $datum = $xml->createElement("datum");
    $termin->appendChild($datum);
    
    print $xml->saveXML();
    ?>
    der erzeugt code sieht dann entsprechend so aus
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <kalender>
      <monat>
        <person>
          <name>Wolf</name>
          <termin>
            <datum/>
          </termin>
        </person>
    
      </monat>
    </kalender>
    ich hab das include zum testen sehr gering gehalten
    Code:
    <?php
    echo include("kal1.php");
    ?>
    und dann sieht der erzeugte code so aus:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <kalender>
      <monat>
        <person>
          <name>Wolf</name>
          <termin>
            <datum/>
          </termin>
        </person>
    
      </monat>
    </kalender>
    1
    kann mir jemand sagen wo das problem liegt?

    danke
    cu SHB

  7. #7
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    In der include Datei nicht mit print ausgeben sondern in eine Variable Schreiben und die header() Definition kannst du weglassen die wird erst ganz am Ende benötigt.
    PHP-Code:
    $meinXML $xml->saveXML(); 
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  8. #8
    Registrierter Benutzer
    Registriert seit
    05.05.2004
    Beiträge
    212
    ja das print hab ich auch gerade gesehen, ich volldepp!

    habs auch wie du geschrieben hast mit saveXML in einen string geschrieben
    nun versuche ich in der anderen datei den string in loadXML einzulesen.

    Code:
    <?php
    
       $xsl = new DOMDocument();
       $xmla = new DOMDocument();
       $proc = new XSLTProcessor();
    
       $xsl->load("sample.php");
       include("kal.php");
       $xmla->loadXML($out);
       $proc->importStylesheet($xsl);
    
       echo $proc->transformToXML($xmla);
    
    ?>
    aber er zeigt nur das xsl file ohne entsprechenden inhalt an, mir ist nicht ganz klar wo der fehler liegt, oder muss ich es dann mit $dom->importNode erst noch importieren?

    cu SHB
    Geändert von shb (20-02-2010 um 16:52 Uhr)

  9. #9
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Die PHP Dateien Includieren damit der PHP Parser diese auch Übersetzt.
    PHP-Code:
      // include sample.php wo die Variable $xslt vorhanden ist
      
    include ( "sample.php" );
      
    // include kal.php wo die Variable $out vorhanden ist
      
    include("kal.php");

       
    // lade $xslt
       
    $xsl = new DOMDocument();
       
    $xsl->loadXML$xslt );

      
    // lade XML Dom
       
    $dom = new DOMDocument();
       
    $dom->loadXML($out);

      
    // erstelle XSLT prozessor
       
    $proc = new XSLTProcessor();
      
    // Importiere xslt
       
    $proc->importStylesheet($xsl);


       
    $html $proc->transformToXML($dom);


      echo 
    $html
    Ich habe dir noch ein Paar Beispiele angehangen.
    Geändert von undefined (22-02-2010 um 15:34 Uhr) Grund: Schlechtschreibung
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  10. #10
    Registrierter Benutzer
    Registriert seit
    05.05.2004
    Beiträge
    212
    so... ich bedanke mich erstmal, war mal wieder "Fehler 50" hab in dem mit php erstellten file einen tag vergessen. jetzt funzt erstmal alles
    DANKE

    cu SHB

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •