генерировать xml и xsl из php - PullRequest
2 голосов
/ 05 июня 2011

Я пытаюсь сгенерировать XML из базы данных MySQL. Приложению не нужно знать таблицы, которые существуют в базе данных.

функция такова, что вы вводите имя таблицы, и она генерирует для нее xml.

Функция работает отлично, но мне нужно стилизовать XML с XSL. поскольку приложение не знает, какую таблицу оно будет обрабатывать, запись предопределенного 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>

1 Ответ

0 голосов
/ 06 июня 2011

Вы не должны определять теги xml в качестве ключа из вашей базы данных, а должны определять уникальную структуру для вашего xml, которую вы можете проверить с помощью DTD или XSD.

Тогда ваш XSL будет действительно простым.

Например, вместо этого:

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

Вы можете сделать что-то вроде:

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

И тогда ваш xsl будет просто сделать:)

И, как упоминалось в комментариях @Tomalak, вы должны использовать DOMDocument вместо объединения строк.

...