如何将txt文件转换为xml?

时间:2014-03-26 10:05:34

标签: php 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>

时间是正确的标签,但&#34;插入&#34;应该是在运作,&#34;产品&#34;在表格中&#34; admin&#34;在用户中。我该如何解决这个问题,以便将其正确放置?

这是我的.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

2 个答案:

答案 0 :(得分:2)

您应该更改txt文件以使用&#34;,&#34;作为分隔符或为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 :(得分: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();
}