1

我一直在研究一个在 XML 文件中显示数据的项目。(有点像 API)。我知道如何用 PHP 解析 XML,以及如何用 PHP 制作 XML 文件,但它们不能一起工作。:)

基本上,我有两个文件:parse.phpxml.php.

xml.php从 MySQL 数据库中获取信息,并将其输出为 XML。

parse.php加载和解析xml.php并将其输出为 HTML。

如果我运行parse.php,它不会加载xml.php。但是,如果我复制输出的 XML(来自xml.php)并将其保存为 xml.xml 文件(并将文件名更改parse.php为“xml.xml”),它就可以工作。我真的很感激任何帮助。

parse.php 的内容:

<?php

    $doc = "xml.php";

    $doc = @simplexml_load_file($doc) or die("Server Error: Recipe not found!");

    $title = $doc->title;

    echo $title

?>

xml.php 的内容:

<?php

    header("Content-type: text/xml");

    $dbc = mysql... //gets data from database

    echo "<!DOCTYPE..."; //xml stuff here

    echo "<title>" . $dataFromMySQL . "</title>";

?>

数据库连接正常,并且 XML 中的 DOCTYPE 没问题,所以这不是问题。

同样,我只有在使用 PHP 动态生成 XML 时才会遇到问题。如果它是一个 .XML 文件,它可以正常工作。

谁能帮我?

谢谢。

4

4 回答 4

5

simplexml_load_file将尝试实际加载xml.php文件的 php 内容。它不会首先运行该文件。您需要进行一些重写或使用这个丑陋的解决方案:

ob_start();
include 'xml.php';
$xml = ob_get_clean();

$doc = simplexml_load_string($xml);
//...

注意:我更喜欢@lonesomeday 提出的解决方案,它只需要更多的重写。

于 2012-05-24T18:13:11.167 回答
3
@simplexml_load_file($doc);

那就是你的问题所在。这不会执行xml.php,但会尝试将该文件(您编写的 PHP 代码)解析为 XML。显然(因为它不是 XML)这行不通。

您必须找到一种将输出从执行xml.phpparse.php.

执行此操作的简单方法是将所有echo调用更改为$xml .=调用,然后简单地更改include xml.phpparse.php.

// xml.php
$xml = '';
$xml .= "<!DOCTYPE..."; //xml stuff here

$output .= "<title>" . $dataFromMySQL . "</title>";

// parse.php
include('xml.php');

simplexml_load_string($xml);

请注意,您的问题在这里显示了使用错误抑制运算符的愚蠢性@。如果您没有使用它,PHP 会向您显示各种错误,这些错误会帮助您了解问题所在。


附录:在我看来,实际上最好的方法是忘记一路上毫无意义的 XML 步骤,只需将数据库输出转换为 HTML。

于 2012-05-24T18:12:54.263 回答
1

如果您想在不重写 xml.php 的情况下执行此操作,可以通过 url 访问让 PHP 处理文件:

$doc = file_get_contents("http://localhost/xml.php");
于 2012-05-24T18:14:33.017 回答
0

您实际上是在加载本地文件。除非你评估它,否则代码不会运行,所以你只会得到代码本身。

您可以使用 CURL 通过 HTTP 下载 xml.php,或者您可以使 xml.php 的 XML 生成组件成为您只需包含并执行的可调用函数。

解析.php:

<?php
  include('xml.inc');

  $doc = @simplexml_load_string(xml_function()) or die("Error");
  echo $doc->title;

xml.php:

<?php
  include('xml.inc');

  header("Content-type: text/xml");
  echo xml_function();

xml.inc:

<?php
  function xml_function() {
    $dbc = mysql... //gets data from database
    $xml = "<!DOCTYPE..."; //xml stuff here
    $xml .= "<title>" . $dataFromMySQL . "</title>";
    return $xml;
  }

但是......老实说,即使这看起来很愚蠢,当您可以让两种输出方法连接到相同的数据并跳过生成/解析步骤时。只需有条件地输出 HTML/XML。

于 2012-05-24T18:21:12.577 回答