在php中的xml元素之后的新行

时间:2015-04-10 07:22:33

标签: php xml

我已经构建了一个大型XML编写器来构建大型XML文件,但我现在只有一个问题,当文件完成时我可以在我的OS X和Linux disto上打开文件,但是Windows计算机存在很大问题在例如开放。记事本中。

我认为这是因为我的脚本在单个linje上构建XML而不是分割元素op。

我的代码看起来像这样。

$filePath = 'file.xml';

$xmlWriter = new XMLWriter();
$xmlWriter->openMemory();
$xmlWriter->startDocument('1.0', 'ISO-8859-1');

$xmlWriter->startElement('rss');
$xmlWriter->writeAttribute('version', '2.0'); 

$xmlWriter->startElement('channel');

if ( $rowProduct !== false )
{
    foreach( $rowProduct AS $key => $val )
    {
        $i++;

        $xmlWriter->startElement('item');

        $xmlWriter->startElement('id');
        $xmlWriter->text('content');
        $xmlWriter->endElement();

        $xmlWriter->endElement();

        if (0 == $i%1000)
        {
            echo "--- clear memery after 1000 rows and dump to xml file ------\n";
            file_put_contents($filePath, $xmlWriter->flush(true), FILE_APPEND);
        }
    }
}

$xmlWriter->endElement();
$xmlWriter->endElement();

file_put_contents($filePath, $xmlWriter->flush(true), FILE_APPEND);

我想要的是像这样的xml

<xml>
    <root>
        <product>
            <id>content</id>
        </product>
    </root>
</xml>

而不喜欢这个

<xml><root><product><id>content</id></product></root></xml>

有人可以解释我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

有一个功能:

http://php.net/manual/en/function.xmlwriter-set-indent.php

我把它添加到这里:

$xmlWriter->startElement('rss');
$xmlWriter->writeAttribute('version', '2.0');
$xmlWriter->setIndent(true);

我无法在记事本中测试它,但在Atom中它可以工作。