1

XMLファイルでデータを表示するプロジェクトに取り組んでいます。(APIのようなものです)。PHPを使用してXMLを解析する方法、およびPHPでXMLファイルを作成する方法を知っていますが、これらは連携して機能しません。:)

基本的に、私は2つのファイルを持っています:parse.phpxml.php

xml.phpMySQLデータベースから情報を取得し、それを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ファイルのphpコンテンツを実際にロードしようとしxml.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.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に変換するのが最善の方法だと思います。

于 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 生成コンポーネントを、単純に含めて実行する呼び出し可能な関数にすることができます。

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 を出力するだけです。

于 2012-05-24T18:21:12.577 に答える