0

test.php という名前の xml ヘッダーと xml コードを含む php ファイルがあります。

    <?php
header('Content-type: text/xml');

$file = file_get_contents('http://api.tradedoubler.com/1.0/vouchers.xml?token=removed');
echo $file;

?>

API からの xml は次のようになります。

<voucherList>
  <voucher>
    <id>115</id>
    <programId>111</programId>
    <programName>Program 111</programName>
    <code>AF30C5</code>
    <updateDate>1332422674941</updateDate>
    <startDate>1332370800000</startDate>
    <endDate>1363906800000</endDate>
    <title>Voucher number one</title>
    <shortDescription>Short description of the voucher.</shortDescription>
    <description>This is a long version of the voucher description.</description>
    <voucherTypeId>1</voucherTypeId>
    <defaultTrackUri>http://clk.tradedoubler.com/click?a(222)p(111)ttid(13)</defaultTrackUri>
    <siteSpecific>True</siteSpecific>
  </voucher>
  <voucher>
    <id>116</id>
    <programId>111</programId>
    <programName>Program 111</programName>
    <code>F90Z4F</code>
    <updateDate>1332423212631</updateDate>
    <startDate>1332370800000</startDate>
    <endDate>1363906800000</endDate>
    <title>The second voucher</title>
    <shortDescription>Short description of the voucher.</shortDescription>
    <description>This is a long version of the voucher description.</description>
    <voucherTypeId>1</voucherTypeId>
    <defaultTrackUri>http://clk.tradedoubler.com/click?a(222)p(111)ttid(13)url(http://www.example.com/product?id=123)</defaultTrackUri>
    <siteSpecific>False</siteSpecific>
    <landingUrl>http://www.example.com/product?id=123</landingUrl>
  </voucher>
</voucherList>

このファイルを xml として読み込むにはどうすればよいですか?

以下は機能しません。

$xml = simplexml_load_file('test.php');
echo $xml;

私はちょうど白いページを取得します。

テスト ファイルは動的であるため、php として保存されます。tradedoubler API からデータをロードしています。

多分それはapi-dataがロードされる方法ですか?

4

3 に答える 3

0

simplexml_load_file()は、xmlファイルをオブジェクトとしてロードします。オブジェクトをエコーする場合は、出力に「オブジェクト」とだけ表示されます。ホワイトページが表示される場合は、問題が発生している可能性があります(つまり、エラーログを確認してください)。

XMLオブジェクトの内容を表示できprint_r($xml);ます(正しく設定されている場合)。

print_rステートメントから出力を取得すると、特定のノードおよび要素へのアクセスを開始できます。

echo $xml->node[index]->element;

等々。

于 2012-11-15T22:58:04.150 に答える
0

サンプルのソースファイルを試したところ、print_r($xml);
実際に出力が得られました。

だから試してみてくださいprint_r($xml);

私はあなたのXMLにアクセスできます(例、私のために働いた)

$xml->voucher[0]->id;

これは、$ xmlがオブジェクトであり、このオブジェクト内に配列(バウチャーなど)があり、この配列内に再びオブジェクトがあるためです。

編集:あなたはあなたのOPをたくさん変えたので:

x.phpを使用して元の例を試しました。

<?php

    header('Content-type: text/xml');

    $file = simplexml_load_file('test.php');
    echo $file->voucher[0]->id;

?>

そしてtest.phpで私はあなたのxmlを痛風にします:

    <voucherList>
  <voucher>
    <id>115</id>
    <programId>111</programId>
    <programName>Program 111</programName>
    <code>AF30C5</code>
    <updateDate>1332422674941</updateDate>
    <startDate>1332370800000</startDate>
    <endDate>1363906800000</endDate>
    <title>Voucher number one</title>
    <shortDescription>Short description of the voucher.</shortDescription>
    <description>This is a long version of the voucher description.</description>
    <voucherTypeId>1</voucherTypeId>
    <defaultTrackUri>http://clk.tradedoubler.com/click?a(222)p(111)ttid(13)</defaultTrackUri>
    <siteSpecific>True</siteSpecific>
  </voucher>
  <voucher>
    <id>116</id>
    <programId>111</programId>
    <programName>Program 111</programName>
    <code>F90Z4F</code>
    <updateDate>1332423212631</updateDate>
    <startDate>1332370800000</startDate>
    <endDate>1363906800000</endDate>
    <title>The second voucher</title>
    <shortDescription>Short description of the voucher.</shortDescription>
    <description>This is a long version of the voucher description.</description>
    <voucherTypeId>1</voucherTypeId>
    <defaultTrackUri>http://clk.tradedoubler.com/click?a(222)p(111)ttid(13)url(http://www.example.com/product?id=123)</defaultTrackUri>
    <siteSpecific>False</siteSpecific>
    <landingUrl>http://www.example.com/product?id=123</landingUrl>
  </voucher>
</voucherList>

そしてそれはまだ私のために働きます。したがって、まだ空白のページが表示される場合は、エラーは別の場所にあるはずです。error_reporting(E_ALL);オンにしましたか?

于 2012-11-15T23:00:24.063 に答える
0

xml ファイルは正常に読み込まれ、出力は空ではなく、いくつかの新しい行です。

試す

echo $xml->asXML();

編集: おそらく、php 構成が外部 URL の file_get_contents をブロックしている (allow_url_fopen = Off)。curl または次のような直接リクエストで取得してみてください。

$xml = '';
$fp = fsockopen('api.tradedoubler.com', 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET /1.0/vouchers.xml?token=removed HTTP/1.1\r\n"
         . "Host: api.tradedoubler.com\r\n"
         . "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        $xml .= fgets($fp, 128);
    }
    fclose($fp);
}

if ($xml != '') {
    $xmlObject = simplexml_load_string($xml);
    if ($xmlObject) {
        // do something nasty! or just echo $xml->asXML();
    }
}
于 2012-11-15T23:05:48.010 に答える