2010-12-02 13 views
0

Mon code génère une sortie xml à partir de l'ensemble de données mysql. Ensuite, j'ai besoin de le transformer en HTML. Je l'ai sauvegardé dans une variable PHP et essayé de l'utiliser dans transformerToXML ($ XML) comme paramètre mais il soulève il attend un objet ici. Comment puis-je convertir cette sortie XML en un objet à utiliser en paramètre ici. Voici mon code:Comment utiliser/convertir une chaîne xml en tant que paramètre dans une transformation xsl

<?php 

// i am using the resultset to build an XML DOM but you can do whatever you like with it ! 

    header("Content-type: text/xml"); 
    $conn = new mysqli("localhost", "babar", "k4541616", "spec", 3306); 
    // one non-recursive db call to get the message tree ! 
    $result = $conn->query("call message_hier(1)"); 
    //--$result = $conn->query("call message_hier_all()"); 
    $xml = new DomDocument; 
    $xpath = new DOMXpath($xml); 
    $msgs = $xml->createElement("messages"); 
    $xml->appendChild($msgs); 
    // loop and build the DOM 
    while($row = $result->fetch_assoc()){ 
    $msg = $xml->createElement("message"); 
    foreach($row as $col => $val) $msg->setAttribute($col, $val); 

    if(is_null($row["parent_msg_id"])){ 
    $msgs->appendChild($msg); 
    } 
    else{ 
    $qry = sprintf("//*[@msg_id = '%d']", $row["parent_msg_id"]); 
    $parent = $xpath->query($qry)->item(0); 
    if(!is_null($parent)) $parent->appendChild($msg); 
    } 
    } 
    $result->close(); 
    $conn->close(); 
    $save = $xml->saveXML();//-> Here i save mxl in php var 
    //echo $save; 

    $xslt = new XSLTProcessor(); 
    $XSL = new DOMDocument(); 
    $XSL->load('msg.xsl'); 
    $xslt->importStylesheet($XSL); 
    header('Content-Type: application/xml'); 
    print $xslt->transformToXML($save); //->error: expects an object here, string given. 

    ?> 

Répondre

0

Vous aurez besoin de transformer votre chaîne XML de nouveau dans un objet via DOMDocument::loadXML() avant de pouvoir l'utiliser.

+0

Comment l'utiliser? – XCeptable

+0

Eh bien, vous pouvez appeler la méthode 'save()' si vous le souhaitez. Voir le lien –

+0

En fait je veux demander où devrais-je l'utiliser? Si vous voulez utiliser en dernière ligne pour imprimer les résultats, c'est-à-dire "print $ xslt-> transformToDoc ($ save)", je l'ai utilisé et le même résultat. Ou vous mentionnez de l'utiliser plus tôt pour convertir xml en domdoc? – XCeptable