使用php格式化的xml文件

时间:2013-12-18 07:41:46

标签: php xml

我使用以下代码使用php

创建xml文件
$doc = new DOMDocument('1.0');
        $doc->formatOutput = true;

        $root = $doc->createElement('alerts');
        $root = $doc->appendChild($root);

        $alert = $doc->createElement('alert');
        $alert = $root->appendChild($alert);

        $id = $doc->createElement('id');
        $id_text = $doc->createTextNode($api_id);
        $id->appendChild($id_text);
        $alert->appendChild($id);

        $msg_type = $doc->createElement('msg_type');
        $msg_type_text = $doc->createTextNode(1);
        $msg_type->appendChild($msg_type_text);
        $alert->appendChild($msg_type);
$doc->save($filename);

它保存了格式良好的xml文件,如

<?xml version="1.0"?>
<alerts>
  <alert>
    <id>22</id>
    <msg_type>1</msg_type>
  </alert>
 </alerts>

但是当我使用以下代码在现有文件中附加标签时,它将不会格式化

$doc = new DOMDocument();
            $doc->formatOutput = true;

            $xml = file_get_contents($filename);
            $doc->loadXML($xml);


            $root = $doc->firstChild;

            $alert = $doc->createElement('alert');
            $alert = $root->appendChild($alert);

            $id = $doc->createElement('id');
            $id_text = $doc->createTextNode($api_id);
            $id->appendChild($id_text);
            $alert->appendChild($id);

            $msg_type = $doc->createElement('msg_type');
            $msg_type_text = $doc->createTextNode(1);
            $msg_type->appendChild($msg_type_text);
            $alert->appendChild($msg_type);
$doc->save($filename);

xml文件格式将是这样的

<alerts>
  <alert>
    <id>3</id>
    <msg_type>1</msg_type>
    <msg>Api Name:Loop LM (H-PO) has low credit.</msg>
    <url>common/api/view_sms_api_list.php</url>
    <status>0</status>
    <create_date>1387351877</create_date>
  </alert>
<alert><id>6</id><msg_type>1</msg_type></alert><alert><id>14</id><msg_type>1</msg_type></alert><alert><id>24</id><msg_type>1</msg_type></alert></alerts>

当我在此xml文件中附加警告标记时,它将以单行继续。问题是什么? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

在加载您的文档$doc->preserveWhiteSpace = false;

之前添加$doc->loadXML($xml);