从php生成xml和xsl

时间:2011-06-04 21:18:51

标签: php mysql xml xslt simplexml

我正在尝试从mysql数据库生成xml。应用程序不需要知道数据库中存在的表。

该函数是这样的,你输入表名,然后为它生成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");

}

THE 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>

1 个答案:

答案 0 :(得分:0)

您不应该将xml标记定义为数据库中的键,而是为xml定义一个可以使用DTD或XSD验证的唯一结构。

然后,您的XSL将非常简单。

例如,而不是:

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

您可以执行以下操作:

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

然后,你的xsl很简单:)

正如@Tomalak在评论中提到的那样,你应该使用DOMDocument而不是连接字符串。