Я использую следующий код для создания XML-файла, используя php
$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-файл. в чем проблема? заранее спасибо.
Добавить $doc->preserveWhiteSpace = false;
перед загрузкой doc $doc->loadXML($xml);