将PHP文件解析为XML文件?

时间:2012-05-24 18:08:14

标签: php mysql xml database parsing

我一直在研究一个在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文件,它可以正常工作。

任何人都可以帮助我吗?

感谢。

5 个答案:

答案 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)

只需使用嵌入字符串mysql函数,无需编写代码即可在您的计算机上运行,​​使您的mysql服务器完成所有工作。

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';