2011-06-04 111 views
2

我想從mysql數據庫生成xml。應用程序不需要知道數據庫中存在的表。生成xml和xsl從php

該函數是這樣的,你輸入表名併爲其生成xml。

該功能的作品完美,但我需要用xsl風格的XML。由於應用程序不知道要處理哪個表,所以編寫一個預定義的xsl已經失敗了。

有人可以建議我如何編程寫一個xsl與生成的XML一起。

功能粘貼在下面。

PHP生成XML(genXMl.php):

<? 
header("content-type:text/xml"); 


if(isset($_GET['tbl'])) 
{ 

    $myServer = "localhost"; 
    $myUser = "user"; 
    $myPass = "pwd"; 
    $myDB = "test"; 
    $table = $_GET['tbl']; 

    function getXML($sql="Default Query") 
    { 
     $conn=mysql_connect("localhost","user","pwd"); 
     $db=mysql_select_db("test"); 
     $result = mysql_query($sql,$conn); 

     $columns=""; 
     echo "<records>"; 
     while($row=mysql_fetch_assoc($result)) 
     { 
      $columns.="<record>"; 
      foreach($row as $key => $value) 
      { 
       $columns.="<$key>$value</$key>"; 
      } 
       $columns.="</record>"; 
     } 
     echo $columns; 
     echo "</records>"; 
    } 
    getXML("SELECT * FROM $table"); 

} 

了xsl:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <html> 
    <body> 
    <h2>My header</h2> 
    <table border="1"> 

     <xsl:for-each select="records/record"> 
     <tr> 
     <td><xsl:value-of select="<?php echo $key; ?>" /></td> //trying to style the $KEY 
     </tr> 
     <tr> 
    <td><xsl:value-of select="<?php echo $value;?>"/></td> //trying to style the $VALUE </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 
+0

您不能像這樣在XSL樣式表中嵌入PHP標籤,您不能同時調用轉換和PHP腳本。我要麼省略XSL步驟並直接輸出樣式HTML,要麼讓'getXML()'函數返回一個DOM對象,您可以在樣式表中調用該對象。簽出'DomDocument-> load()' – Robin 2011-06-04 21:35:32

+2

您正在通過串聯字符串來構建XML。不要這樣做。使用'DOMDocument'。 – Tomalak 2011-06-04 21:40:27

回答

0

你不應該定義XML標記爲從數據庫的關鍵,但定義的獨特結構您可以使用DTD或XSD驗證的xml。

然後,你的XSL將會非常簡單。

例如,而不是:

$columns.="<$key>$value</$key>"; 

你可以這樣做:

$columns.="<key name=\"$key\">$value</key>"; 

然後,你的XSL會製作簡單:)

而作爲mentionned在@Tomalak的評論中,您應該使用DOMDocument而不是連接字符串。