我一直在研究一个在XML文件中显示数据的项目。 (它有点像API)。我知道如何用PHP解析XML,以及如何在PHP中创建XML文件,但它们不能一起工作。 :)
基本上,我有两个文件:parse.php
和xml.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文件,它可以正常工作。
任何人都可以帮助我吗?
感谢。
答案 0 :(得分:5)
simplexml_load_file
将尝试实际加载xml.php
文件的php内容。它不会先运行该文件。你需要做一些重写或使用这个丑陋的解决方案:
ob_start();
include 'xml.php';
$xml = ob_get_clean();
$doc = simplexml_load_string($xml);
//...
注意:我更喜欢@ lonesomeday提出的解决方案,它只需要更多的重写。
答案 1 :(得分:3)
@simplexml_load_file($doc);
这就是你的问题所在。这不会执行xml.php
,而是尝试将该文件(您编写的PHP代码)解析为XML。显然(因为它不是XML)这不起作用。
您必须找到一种方法,将输出从xml.php
执行到parse.php
。
执行此操作的简单方法是将所有echo
来电更改为$xml .=
来电,将include
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);
请注意,此处的问题显示使用错误抑制运算符@
的愚蠢。如果您没有使用它,PHP会向您显示各种错误,这些错误可以帮助您了解问题所在。
附录:对我来说,实际上最好的方法是忘记沿途的无意义XML步骤,只需将数据库输出转换为HTML。
答案 2 :(得分:1)
如果你想在不重写xml.php的情况下这样做,你可以通过访问url来获取PHP来处理文件:
$doc = file_get_contents("http://localhost/xml.php");
答案 3 :(得分:0)
你真的在加载本地文件。除非你评估它,否则代码不会运行,所以你只需要自己获取代码。
你可以使用CURL通过HTTP下载xml.php,或者你可以使xml.php的XML生成组件成为一个可调用的函数,你只需要包含并执行它。
parse.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。
答案 4 :(得分:0)
SUBSTRING(page, INSTR(page, '<title>')+7,(INSTR( page, '</title>'))-(INSTR( page, '<title>')+7) )
实施例
UPDATE url2 SET title = SUBSTRING(page,INSTR(page,'')+ 7,(INSTR(page,'')) - (INSTR(page,'')+ 7))
或通过
进行测试SELECT SUBSTRING(页面,INSTR(页面,'')+ 7,(INSTR(页面,'')) - (INSTR(页面,'')+ 7)),页面 来自url2 在哪里url ='http://en.wikipedia.org/wiki/File:Nag_Nathaiya_festival_in_Varanasi.jpg';