преобразовать текстовый файл в XML с помощью PHP? - PullRequest
2 голосов
/ 15 декабря 2010

data.txt

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

Я хочу преобразовать этот текстовый файл в xml, используя модуль simplexml, используя php?спасибо:))

пс, я новичок в этом

РЕДАКТИРОВАТЬ:

<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 ]

4 голосов
/ 15 декабря 2010

Я предлагаю вам использовать 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 на имя файла, если вы хотите, чтобы он выводился в файл.

3 голосов
/ 15 декабря 2010

Хотя я думаю, XMLWriter лучше всего подходит для этой задачи (, как в моем другом ответе ), если вы действительно хотите сделать это с 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 не позволяет автоматически делать отступы тегам.

...