【发布时间】:2012-11-28 22:43:59
【问题描述】:
问题:我有一个存储在数据库中的 XML sn-p,我想将它与数据库中的其他几个字段结合起来,并使用 PHP 中的 HTML 来呈现它们。
我的解决方案: 我有 Perl 后端脚本
$query = "select id, description, xml_content, name from table where id = '$id'";
然后修改 XML 以包含这些字段。
$xml_content =~ s|<Record>|<Record name="$name" id="$id" desc="$desc">|i;
然后我使用 XSL 文件将其转换为
<xsl:output method="html"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form action="info.php" method="get" accept-charset="utf-8">
<label for="id">Display xml for: </label>
<input type="text" name="id" value="" id="id" size="40"/>
<p><input type="submit" value="Display it! →"/></p>
</form>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="doc:Record">
<p>
<xsl:choose>
<xsl:when test="./@none">
XML Content ID <xsl:value-of select="@id"/> NOT FOUND
</xsl:when>
<xsl:otherwise>
XML Content ID <xsl:value-of select="@id"/> Found
<xsl:value-of select="@desc"/> - <xsl:value-of select="@name"/>
</xsl:otherwise>
</xsl:choose>
</p>
</xsl:template>
然后我使用 PHP 获取 CGI 变量并运行 perl 脚本并显示输出。
<?php
if (!empty($_GET['id'])) {
$command = "getxml.pl --id=" . $_GET['id'];
$process = proc_open($command, $descriptorspec, $pipes, null, $_SERVER);
if (is_resource($process)) {
$line = stream_get_contents($pipes[1]);
} else {
$line = '<Record none="" desc="' . $command . '"></Record>';
}
}
header('Content-type: text/xml');
echo '<?xml version="1.0" encoding="ISO-8859-1"?>';
echo '<?xml-stylesheet type="text/xsl" href="xmlinfo.xsl"?>';
echo "\n";
if (empty($command)) {
#Display the form only.
$line = '<Record></Record >';
}
echo "$line \n";
?>
由于 PHP 没有配置 xslt,这是我能想到的唯一使用 PHP 在 HTML 中显示 XML 的方法。
我的问题是:
- 有没有办法删除XSL 中的
<html><body><form>部分并将其放入PHP 中。这样看起来会干净得多。
谢谢。
【问题讨论】:
-
这是一个非常疯狂的工作流程!请问,这个过程的哪些部分是重要的?你能用一个网络框架重新实现整个事情吗?如果你给出一个示例 XML 文档,我可以用 Perl 模拟一些东西,尽管我确信 RoR(甚至可能是 PHP)也会有办法做到这一点。最后的回报也应该是 HTML 或 XML(我真的在问标题)。也许你也可以给出一个示例响应。
-
嗯,主要的是我想在浏览器中显示一些信息(我猜这意味着 HTML 作为最终输出)来自存储在数据库中的一大块 XML 以及来自其他一些信息的其他信息数据库中的表。最大和最重要的部分是存储在 XML 中,所以我从那里开始。
-
我想尽可能多地保留 XML。我决定抓住所有其他位并将其转换/嵌入到大 XML 块中。这就是 Perl 部分。然后我考虑使用相同的 Perl 脚本来执行 CGI 部分,但决定使用 PHP 进行调用会更“干净(??)”。这样我也可以使用 cli 中的 Perl 脚本。这就是我最终使用 XML、XSL、Perl 和 PHP 的原因。相当愚蠢的解决方案,而且不太优雅
-
当我编写一个示例时,您可以在我的一篇旧博客文章中看到我要去哪里:blogs.perl.org/users/joel_berger/2012/10/…