如何在XML文件上写入缩进文本(php)

时间:2016-06-21 08:35:04

标签: php xml dom indentation

我想在存储在磁盘上的XML文件中添加一个新节点。这部分没问题,我已经解决了:

                        $xml = new DOMDocument("1.0", "ISO-8859-1");
                        $xml->preserveWhiteSpace = FALSE;
                        $xml->formatOutput = TRUE;
                        $xml->load($fichier);

                        ...
                        $rootTag->insertBefore($annonce,$rootTag->firstChild);
                        $xml->save($fichier);

初始XML:

<genevecrb>
<annonce id="149">
        <flagplus/>
        <entete>GENEVE</entete>
        <nouveau>1</nouveau>
        <description>EN EXCLUSIVITÉ SUPERBE RESTAURANT EN SA</description>
        <couleur>R</couleur>    
        <detail>90 places intérieur et TERRASSE privative de 80 places&lt;br/&gt;
                CA 1'500'000.--&lt;br/&gt;
                PV sur demande et sur rdv. Possibilité de crédit si 70% fonds propres (env. 530'000.--)&lt;br/&gt;
                Hyper opérationnel et entièrement refait à neuf. Bail 10 années renouvelable de 10 années.&lt;br/&gt;
                Loyer 5'100.-- avec parkings et chauffage.&lt;br/&gt;
                Dossier confidentiel.
        </detail>
        <autre/>
        <contact>Pour tout renseignement nous contacter</contact>
        <vente>REMIS</vente>
</annonce>

添加新节点后:

<genevecrb><annonce id="150"><flagplus/><entete>Ceci est un message</entete><nouveau/><description>Le message de description</description><couleur/><detail>Le bla bla bla</detail><autre>Autre r&amp;eacute;sine</autre><contact>Contact</contact><vente>Vente</vente></annonce>
<annonce id="149">
        <flagplus/>
        <entete>GENEVE</entete>
        <nouveau>1</nouveau>
        <description>EN EXCLUSIVITÉ SUPERBE RESTAURANT EN SA</description>
        <couleur>R</couleur>    
        <detail>90 places intérieur et TERRASSE privative de 80 places&lt;br/&gt;
                CA 1'500'000.--&lt;br/&gt;
                PV sur demande et sur rdv. Possibilité de crédit si 70% fonds propres (env. 530'000.--)&lt;br/&gt;
                Hyper opérationnel et entièrement refait à neuf. Bail 10 années renouvelable de 10 années.&lt;br/&gt;
                Loyer 5'100.-- avec parkings et chauffage.&lt;br/&gt;
                Dossier confidentiel.
        </detail>
        <autre/>
        <contact>Pour tout renseignement nous contacter</contact>
        <vente>REMIS</vente>
</annonce>

新节点是内联的而不是缩进的。 PreserveWhiteSpace和formatOutput不起作用。 我怎么能缩进呢?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

XML是图的抽象。根据您使用的API,像制表符和换行符这样的空格实际上可以视为TextNode。如果你将空格与元素混合在一起,那就是XML中的含义,但如果它不是文本的一部分,一些解析器会忽略空格。这会造成元素之间没有文字的印象。

那说你的缩进来自你没有添加的其他节点 - 你不应该,真的。使用库的“漂亮打印”功能来保存文档,或者在保存文件后在文件上运行格式化程序。