2014-03-26 323 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

制表符间距会更好,因为使用空格分隔符限制数据字段只是一个字 –