2011-12-03 74 views
0

我有幾個.txt格式的文件(這些文件可以保存在文件夾中或在執行後從桌面打開)。使用PHP將文本文件轉換爲XML

我想在PHP中構建一個應用程序,它可以檢索這些文件並將它們保存爲XML格式,然後使用XSLT動態顯示。

有沒有什麼方法可以讓我做到這一點?

這是我到現在爲止代碼:

$fp = fopen('optim.txt', 'r'); 

$xml = new XMLWriter; 
$xml->openURI('php://output'); 
$xml->setIndent(true); // makes output cleaner 

$xml->startElement('qualité'); 
while ($line = fgetcsv($fp)) { 

    $xml->startElement('qualité'); 
    $xml->writeElement('critere', $line[0]); 
    $xml->writeElement('poids', $line[1]); 
    $xml->writeElement('Vm', $line[2]); 
    $xml->writeElement('SV', $line[3]); 
    $xml->writeElement('critere', $line[4]); 
    $xml->writeElement('poids', $line[5]); 
    $xml->writeElement('Vm', $line[6]); 
    $xml->writeElement('SV', $line[7]); 
    $xml->writeElement('resultat', $line[8]); 
    $xml->endElement(); 
} 
$xml->endElement(); 

但是有沒有結果,任何人可以幫助我找到我要去的地方錯了嗎?

回答

0

問題是伴您行: -

$xml->openURI('php://output'); 

這直接將輸出發送到客戶端瀏覽器,我認爲這是你想要做什麼。但是,您需要設置正確的標題來反映這一點。

以下行添加到您的代碼

header("Content-Type: text/xml"); 

,您將直接在瀏覽器中看到的輸出。它的內容並不重要,但它必須在任何內容發送到瀏覽器之前,最好在$fp = fopen('optim.txt', 'r');之前

您還應該將最外層元素的名稱更改爲任何內容'qualité'的複數是這樣的,所以你沒有同名的父子元素。

此外,在$xml->setIndent(true);添加此行$xml->startDocument();否則您的xml將無效。

後多一點挖它似乎是必須有一個默認的時區設置(我不知道爲什麼),所以將它添加到你的腳本的開頭: -

date_default_timezone_set("GMT"); //or whatever your default timezone is. 

哪意味着你的代碼應該是這樣的: -

date_default_timezone_set("GMT"); //or whatever your default timezone is. 
header("Content-Type: text/xml"); //Added as part of answer 
$fp = fopen('optim.txt', 'r'); 

$xml = new XMLWriter; 
$xml->openURI('php://output'); 
$xml->startDocument(); // added as part of answer 
$xml->setIndent(true); // makes output cleaner 

$xml->startElement('qualités'); //changed as part of answer 
while ($line = fgetcsv($fp)) { 

    $xml->startElement('qualité'); 
    $xml->writeElement('critere', $line[0]); 
    $xml->writeElement('poids', $line[1]); 
    $xml->writeElement('Vm', $line[2]); 
    $xml->writeElement('SV', $line[3]); 
    $xml->writeElement('critere', $line[4]); 
    $xml->writeElement('poids', $line[5]); 
    $xml->writeElement('Vm', $line[6]); 
    $xml->writeElement('SV', $line[7]); 
    $xml->writeElement('resultat', $line[8]); 
    $xml->endElement(); 
} 
$xml->endElement(); 
+0

我嘗試,但沒有任何結果:/ – olla

+0

我不知道你所說的沒有結果的意思,你可以更清楚一點。也請先嚐試寫入文件,以便可以看到實際輸出的內容。一旦你有這個正確的,你可以發送到輸出。 – vascowhite

+0

當我執行代碼...我沒有任何結果..plz你可以通過郵件[email protected]與我聯繫.... thnks很多:) – olla