我正在尝试从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>
答案 0 :(得分:0)
您不应该将xml标记定义为数据库中的键,而是为xml定义一个可以使用DTD或XSD验证的唯一结构。
然后,您的XSL将非常简单。
例如,而不是:
$columns.="<$key>$value</$key>";
您可以执行以下操作:
$columns.="<key name=\"$key\">$value</key>";
然后,你的xsl很简单:)
正如@Tomalak在评论中提到的那样,你应该使用DOMDocument而不是连接字符串。