生成xml和xsl从php
问题描述:
我想从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>
答
你不应该定义XML标记为从数据库的关键,但定义的独特结构您可以使用DTD或XSD验证的xml。
然后,你的XSL将会非常简单。
例如,而不是:
$columns.="<$key>$value</$key>";
你可以这样做:
$columns.="<key name=\"$key\">$value</key>";
然后,你的XSL会制作简单:)
而作为mentionned在@Tomalak的评论中,您应该使用DOMDocument而不是连接字符串。
您不能像这样在XSL样式表中嵌入PHP标签,您不能同时调用转换和PHP脚本。我要么省略XSL步骤并直接输出样式HTML,要么让'getXML()'函数返回一个DOM对象,您可以在样式表中调用该对象。签出'DomDocument-> load()' – Robin 2011-06-04 21:35:32
您正在通过串联字符串来构建XML。不要这样做。使用'DOMDocument'。 – Tomalak 2011-06-04 21:40:27