2014-03-26 215 views
1

我想要做的是將我的.txt文件轉換爲xml。我把所有的東西放在一個標籤裏面,而不是每個標籤都放在他們自己的標籤中。如何將txt文件轉換爲xml?

$fp = fopen('notes.txt', 'r'); 
$xml = new XMLWriter; 
$xml->openURI('notes.xml'); 
$xml->setIndent(true); 
$xml->startElement('Notes'); 
while ($line = fgetcsv($fp)) { 
    $xml->startElement('note'); 
    $xml->writeElement('dateTime', $line[0]); 
    $xml->writeElement('Operation', $line[1]); 
    $xml->writeElement('table', $line[2]); 
    $xml->writeElement('user', $line[3]); 
    $xml->endElement(); 
} 
$xml->endElement(); 

這就是我得到:

<Notes> 
<note> 
    <dateTime>2014-03-26 02:43:32  Insert  Products  Admin</dateTime> 
    <Operation/> 
    <table/> 
    <user/> 
</note> 
<note> 
    <dateTime>2014-03-26 02:53:04  Insert  Products  Admin</dateTime> 
    <Operation/> 
    <table/> 
    <user/> 
</note> 
<note> 
    <dateTime>2014-03-26 02:58:13  Insert  Products  Admin</dateTime> 
    <Operation/> 
    <table/> 
    <user/> 
</note> 
<note> 
</Notes> 

時間是在它的正確的標籤,但「插入」應該是在工作,在表中「產品」和「admin」用戶。我該如何解決這個問題,使它正確放置?

這是我的.txt文件:

2014-03-26 02:43:32  Insert  Products  Admin 
2014-03-26 02:53:04  Insert  Products  Admin 
2014-03-26 02:58:13  Insert  Products  Admin 
+0

那麼你需要解析(不僅讀取/轉儲)你的.txt輸入逐行。在第一次看'分裂()'將工作正常 – Najzero

+0

您的txt文件不是逗號分隔。你應該爲fgetcsv()配置一個分隔符。它是一個用作分隔符(「\ t」)的選項卡嗎? – Typoheads

+1

拆分已棄用。使用爆炸代替 –

回答

2

您應該更改txt文件使用 「」 作爲分隔符,或配置一個fgetcsv()

$fp = fopen('notes.txt', 'r'); 
$xml = new XMLWriter; 
$xml->openURI('notes.xml'); 
$xml->setIndent(true); 
$xml->startElement('Notes'); 
while ($line = fgetcsv($fp, 0, "\t")) { 
    $xml->startElement('note'); 
    $xml->writeElement('dateTime', $line[0]); 
    $xml->writeElement('Operation', $line[1]); 
    $xml->writeElement('table', $line[2]); 
    $xml->writeElement('user', $line[3]); 
    $xml->endElement(); 
} 
$xml->endElement(); 
1

嘗試explode()

不確定文件空間,但需要在爆炸後得到結果並根據您的結果設置打印陣列$lines

while ($line = fgetcsv($fp)) { 
$lines = explode(' ', $line); 
    $xml->startElement('note'); 
    $xml->writeElement('dateTime', $lines[0]. ' '. $lines[1]); 
    $xml->writeElement('Operation', $lines[2]); 
    $xml->writeElement('table', $lines[3]); 
    $xml->writeElement('user, $lines[4]); 
    $xml->endElement(); 
} 
+0

製表符間距會更好,因爲使用空格分隔符限制數據字段只是一個字 –