将PHP文件解析为XML文件?
我一直在从事一个在XML文件中显示数据的项目。(有点像API)。我知道如何用PHP解析XML,以及如何用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
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。这就是所谓的关注点分离,是良好编码实践的基础之一。太棒了!非常感谢大家的快速(和有用的)回复!