2011-06-04 114 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而不是连接字符串。