使用php将文本文件转换为xml?

时间:2010-12-15 01:00:41

标签: php xml simplexml text-files

data.txt中

ha15rs,250,home2.gif,2
ha36gs,150,home3.gif,1
ha27se,300,home4.gif,4
ha4678,200,home5.gif,5

我想使用php使用simplexml模块将此文本文件转换为xml?谢谢:))

P.S。我是新来的

编辑:

<allproperty>
          <aproperty>
                   <postcode></postcode>
                   <price></price>
                   <imagefilename></imagefilename>
                   <visits></visits>
              </aproperty>
              <aproperty>
                   <postcode></postcode>
                   <price></price>
                   <imagefilename></imagefilename>
                   <visits></visits>
              </aproperty>
              <aproperty>
                   <postcode></postcode>
                   <price></price>
                   <imagefilename></imagefilename>
                   <visits></visits>
              </aproperty>
          </allproperty>

2 个答案:

答案 0 :(得分:4)

我建议您使用XMLWriter代替,因为它最适合(并且它也像SimpleXML一样内置):

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

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

$xml->startElement('allproperty');
while ($line = fgetcsv($fp)) {
   if (count($line) < 4) continue; // skip lines that aren't full

   $xml->startElement('aproperty');
   $xml->writeElement('postcode', $line[0]);
   $xml->writeElement('price', $line[1]);
   $xml->writeElement('imagefilename', $line[2]);
   $xml->writeElement('visits', $line[3]);
   $xml->endElement();
}
$xml->endElement();

当然,如果要将php://output参数输出到文件,可以将其更改为文件名。

答案 1 :(得分:3)

虽然我认为XMLWriter最适合该任务(like in my other answer),但如果你真的想用SimpleXML做,那么方法如下:

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

$xml = new SimpleXMLElement('<allproperty></allproperty>');

while ($line = fgetcsv($fp)) {
   if (count($line) < 4) continue; // skip lines that aren't full

   $node = $xml->addChild('aproperty');
   $node->addChild('postcode', $line[0]);
   $node->addChild('price', $line[1]);
   $node->addChild('imagefilename', $line[2]);
   $node->addChild('visits', $line[3]);
}

echo $xml->saveXML();

你会注意到输出不是那么干净:因为SimpleXML不允许你自动缩进标签。