2012-11-15 76 views
0

我有一個名爲test.php的xml標題和xml代碼的php文件。加載php文件wth xml標題

<?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數據加載的方式?

+0

你能發佈一個示例文件嗎?也許剝奪一些數據,只是爲了給我一個想法。 –

+0

顯示源文件。你想用xml做什麼?只在對象/數組樹上使用'echo'可能不起作用。你是否也啓用了error_reporting? (獲取空白頁的第一步!) – mario

回答

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

0

simplexml_load_file()將加載xml文件作爲對象。如果你迴應一個對象,它應該只是在輸出中說「對象」。如果您正在獲取白頁,則很可能出現問題(例如:檢查錯誤日誌)。

您可以print_r($xml);查看XML對象的內容(如果設置正確)。

如果您從print_r的聲明得到輸出,你就可以開始訪問特定的節點和元素:

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

等。

+0

我猜測XML內容設置不正確,因爲我仍然會看到白頁。我已經更新了OP。 –

+0

你能直接調用你的xml PHP頁嗎?如果是這樣,您可以將輸出複製/粘貼到test.xml中,並嘗試使用該靜態xml文件中相同的代碼。 –

+0

不,不幸的不是。這就是爲什麼我嘗試使用test.php。 tradedoubler xml必須以某種方式錯誤? –

0

xml文件加載正常,輸出不爲空,但只是一些新行。

嘗試

echo $xml->asXML(); 

編輯: 也許你的PHP配置塊的file_get_contents的外部URL(allow_url_fopen選項= OFF)。嘗試使用捲曲或直接請求來獲得它:

$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(); 
    } 
} 
+0

這實際上並沒有幫助他訪問PHP中的XML元素。 –

+0

哦,對不起,我讀過,他試圖使用file_get_contents與外部URL獲取XML ... – iRaS