将PHP文件解析为XML文件?

将PHP文件解析为XML文件?,php,mysql,xml,database,parsing,Php,Mysql,Xml,Database,Parsing,我一直在从事一个在XML文件中显示数据的项目。(有点像API)。我知道如何用PHP解析XML,以及如何用PHP生成XML文件,但它们不能一起工作。:) 基本上,我有两个文件:parse.php和xml.php // xml.php $xml = ''; $xml .= "<!DOCTYPE..."; //xml stuff here $output .= "<title>" . $dataFromMySQL . "</title>"; // parse.php

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

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

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

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

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

simplexml_load_string($xml);
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

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

  $doc = @simplexml_load_string(xml_function()) or die("Error");
  echo $doc->title;
标题;
echo$标题
?>
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文件,它就可以正常工作

有人能帮我吗

谢谢

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

您必须找到一种方法,将执行
xml.php
的输出转换为
parse.php

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

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

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

simplexml_load_string($xml);
实现这一点的简单方法是将所有
echo
调用更改为
$xml.=
调用,只需将
包含
xml.php
更改为
parse.php

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

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

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

simplexml_load_string($xml);
//xml.php
$xml='';
$xml.=”
这就是问题所在。这不会执行
xml.php
,而是尝试将该文件(您编写的php代码)解析为xml。显然(因为它不是xml),这是行不通的

您必须找到一种方法,将执行
xml.php
的输出转换为
parse.php

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

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

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

simplexml_load_string($xml);
实现这一点的简单方法是将所有
echo
调用更改为
$xml.=
调用,只需将
包含
xml.php
更改为
parse.php

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

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

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

simplexml_load_string($xml);
//xml.php
$xml='';

$xml.=“
simplexml\u load\u文件
将尝试实际加载
xml.php
文件的php内容。它不会首先运行该文件。您需要重新编写或使用此丑陋的解决方案:

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

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

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

simplexml\u加载文件
将尝试实际加载
xml.php
文件的php内容。它不会首先运行该文件。您需要重新编写或使用此丑陋的解决方案:

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

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

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

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

$doc = file_get_contents("http://localhost/xml.php");

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

$doc = file_get_contents("http://localhost/xml.php");

您实际上正在加载本地文件。除非您对其求值,否则代码不会运行,因此您只能得到代码本身

您可以使用CURL通过HTTP下载xml.php,也可以使xml.php的xml生成组件成为一个可调用的函数,只需包含并执行该函数即可

parse.php:

<?php

    $doc = "xml.php";

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

    $title = $doc->title;

    echo $title

?>
<?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();

您实际上正在加载本地文件。除非您对其求值,否则代码不会运行,因此您只能得到代码本身

您可以使用CURL通过HTTP下载xml.php,也可以使xml.php的xml生成组件成为一个可调用的函数,只需包含并执行该函数即可

parse.php:

<?php

    $doc = "xml.php";

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

    $title = $doc->title;

    echo $title

?>
<?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.php的情况下执行此操作,请使用。使用
file\u get\u contents
执行此操作(执行不必要的HTTP请求并显著降低页面速度)是一种非常糟糕的方法。如果希望在不重写
xml.php
的情况下执行此操作,请使用。使用
file\u get\u contents
执行此操作(执行不必要的HTTP请求并显著降低页面速度)是一种非常糟糕的方法。您应该将生成xml的代码作为函数编写—在您将要处理的程序文件中加载包含的代码,然后调用该函数以获取xml内容。您试图做的是一团糟。您应该将xml生成代码作为一个函数来编写—在您将要处理的程序文件中加载一个include,然后调用该函数来获取xml内容。您试图做的事情是一团糟。而且,生成XML并不是生成看起来像XML的字符串。使用DOM。另外,生成XML并不是生成看起来像XML的字符串。使用DOM。@Caleb没有理由不能在一个文件和两个使用数据的其他文件中获取数据,一个文件将数据转换为HTML,另一个文件将数据转换为XML。这就是所谓的关注点分离,是良好编码实践的基础之一。太棒了!非常感谢大家的快速(和有用的)回复@Caleb没有理由不能在一个文件和另外两个使用数据的文件中获取数据,一个将数据转换为HTML,另一个转换为XML。这就是所谓的关注点分离,是良好编码实践的基础之一。太棒了!非常感谢大家的快速(和有用的)回复!